java邮件开发-----通过Authenticator发送邮件

import java.util.StringTokenizer;

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

import javax.swing.JOptionPane;

public class MyAuthenticator extends Authenticator{

String username = null;

String password = null;

// 通过MyAuthenticator类的构造方法接受外部传入的用户信息

public MyAuthenticator (String user, String pass) {

username = user;

password = pass;

}

//覆盖Authenticator类中的getPasswordAuthentication方法

public PasswordAuthentication getPasswordAuthentication() {

String username ,password;

String result =

JOptionPane.showInputDialog("请输入用户名和密码,中间用‘,’分割");

StringTokenizer st = new StringTokenizer(result, ",");

username = st.nextToken();

password = st.nextToken();

//使用外部传入的用户名和密码创建PasswordAuthentication对象

return 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 AuthenticatorDemo {

public static void main(String[] args) throws Exception {

String smtpServer = "smtp.sina.com";  //邮件服务器主机名

String protocol = "smtp"; //邮件传输协议

String username = "xxxxxxxxxxxx";  //登录用户名

String password = "xxxxxxxxxxxx用授权码代替密码";

String from = "xxxxxxxxxxx@sina.com";

String to = "xxxxxxxxx@qq.com";

String subject = "authenticator demo"; //邮件主题

String body = "authenticator demo"; //邮件内容

//创建Session对象

Properties props = new Properties();

props.setProperty("mail.transport.protocol", protocol);

props.setProperty("mail.host", smtpServer);

props.put("mail.smtp.auth", "true");

MyAuthenticator authenticator = new MyAuthenticator(username, password);

Session session = Session.getInstance(props,authenticator);

/*使用Authenticator类向邮件服务器提交认证信息可以提高程序的可扩展性,使程序的认证方式变的

* 更加灵活,应用程序可以用过查询数据库,或者弹出认证对话框,甚至从一个加密的文件中读取

* 用户的认证信息,当应用程序的开发者想改变程序的认证信息获取方式时,只需要重新编写一个Authenticator

* 类的子类,并将子类的实例对象注册到Session对象中即可。实际上是设计模式策略,主程序将获取用户认证的

* 信息的方式委托给了另外一个对象来完成,当获取用户认证信息的方式发生改变时,不用修改主程序,只需要

* 编写一个新的策略对象

*/

session.setDebug(true);

//创建代表邮件的MimeMessage对象

MimeMessage msg = new MimeMessage(session);

msg.setFrom(new InternetAddress(from));

msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

msg.setSentDate(new Date());

msg.setSubject(subject);

msg.setText(body);

//保存并生成最终的邮件内容

msg.saveChanges();

/*由于Session对象中注册了Authenticator对象,

* 从Authenticator对象中可以获得用户认证信息,所以,这里可以直接调用

* Transport类的静态send方法发送邮件

*/

Transport.send(msg);

/*也可以使用下面的代码先获得Transport对象后,在使用无参数的connect方法连接邮件服务器和发送邮件

*

*/

// Transport transport = session.getTransport();

// transport.connect();

// transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));

// transport.close();

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容