JAVAMAIL 1.4身份验证

    技术2022-05-11  79

    今天 突然想对现有的工程增加邮件发送功能,上网找了一些资料,结果很纳闷,邮件在发送的过程中发件人地址这里频繁的报错,没有任何验证的代码存在,试想一下实际情况,不可能我平时写什么发件人就可以发送过去了吧。后来在网上又找了些JAVA验证这一类资料,可惜,可能版本升级太快,这些方法已经无法在JAVAMAIL 1.4版里用到了,于是我在官方下了API文档,找到了这样一个方法

    public static Session getInstance(java.util.Properties props, Authenticator authenticator) Get a new Session object.

    每次新建会话时,我们都应该在这里填入验证明信息,让我们看看这个方法的第二个参数

    public abstract class Authenticator  extends java.lang.Object

    这个类是抽象类,但是API文档里没有给出这个类的继承类。OK,让我们自己去继承它好了

     static class SmtpAuth extends javax.mail.Authenticator {   private String user,password;

      public void getuserinfo(String getuser,String getpassword){     user = getuser;     password = getpassword;   }  protected javax.mail.PasswordAuthentication getPasswordAuthentication(){       return new javax.mail.PasswordAuthentication(user,password);   } }

    因为我图方便,我把SmtpAuth 设置成为静态内部类,看看Authenticator 的这个方法

    protected  PasswordAuthenticationgetPasswordAuthentication()           Called when password authentication is needed.

    这就是当需要密码验证的时候此方法被呼叫,好了,返回一个PasswordAuthentication类。查出他的构造函数

    PasswordAuthentication(java.lang.String userName, java.lang.String password)           Initialize a new PasswordAuthentication

    于是我们可以设计username和password成员了。。于是整个验证细节也就明了拉!下面是我设计的一个简单的

     

    import java.util.Date;import java.util.Properties;

    import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;

    public class Mail { static class SmtpAuth extends javax.mail.Authenticator {   private String user,password;

      public void getuserinfo(String getuser,String getpassword){   user = getuser;   password = getpassword;   }  protected javax.mail.PasswordAuthentication getPasswordAuthentication(){   return new javax.mail.PasswordAuthentication(user,password);   } } /**  * @param args  * @throws MessagingException   * @throws AddressException   */ @SuppressWarnings("static-access") public static void main(String[] args) throws AddressException, MessagingException {  // TODO 自动生成方法存根  Properties props = new Properties();    Session sendMailSession;    Transport transport;    SmtpAuth sa = new SmtpAuth();    sa.getuserinfo("tw", "1234");    sendMailSession = Session.getDefaultInstance(props, sa);    transport = sendMailSession.getTransport("smtp");    transport.connect("134.98.83.32","tw", "1234");    props.put("mail.smtp.host", "134.98.83.32");    props.put("mail.smtp.auth", "true");    Message newMessage = new MimeMessage(sendMailSession);    newMessage.setFrom(new InternetAddress("tw@zjdw.com"));    newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("tw@zjdw.com"));    newMessage.setSubject("hello world");    newMessage.setSentDate(new Date());    newMessage.setText("这是一个测试的例子");    transport.send(newMessage); }

    }

     

    OK。验证成功!


    最新回复(0)