您的位置:首页 > 编程语言 > Java开发

利用javaMail发送邮件

2016-07-08 19:39 381 查看
经过网上查找资料,从前辈们提供的资料中进行不断的总结改进,本人完成了以下程序。以下的程序只能发送一些简单的文字到邮箱,并没有实践过发送附件,图片,文件等复杂情况。

一、几个重要的对象

1)Session
2)Message
3)Transport
二、第三方程序用qq账号发送邮件
1,什么是客户端?
在腾讯看来,所有不是通过腾讯页面或客户端登陆的都属于客户端
在上面所谓的客户端登陆qq时,原来的账号密码已经不管用了,需要进入腾讯进行设置,获取授权码,用授权码进行登陆。
2,怎么获取授权码?
进入qq邮箱——>设置——>账户——>开启POP3/SMTP服务——>短信验证——>获取授权码

3,怎样在程序中利用qq邮箱,向其他的邮箱发送邮件?
1)在程序中导入需要的jar包(2个):

2)写程序
public class MailSender {
public static void sendMail(Mail mail) throws Exception {
Properties props = new Properties(); // 可以加载一个配置文件
// 使用smtp:简单邮件传输协议
props.setProperty("mail.transport.protocol", "smtp");//发送邮件协议
props.setProperty("mail.smtp.auth", "true");//需要验证

// 设置邮箱服务器的端口号
Integer port=mail.getPort();
props.setProperty("mail.smtp.port",port.toString());
if ("smtp.qq.com".equals(mail.getStmpType())) {
// qq邮箱需要的的SSL设置
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.port", port.toString());
props.setProperty("mail.smtp.socketFactory.port", port.toString());
}

// 1,根据属性新建一个邮件会话
Session session = Session.getInstance(props);
session.setDebug(true); //有他会打印一些调试信息。

// 2,由邮件会话新建一个消息对象
MimeMessage message = new MimeMessage(session);
// 3,设置发件人的地址
message.setFrom(new InternetAddress(mail.getFromMail()));
// 4,设置收件人,并设置其接收类型为TO
message.setRecipient(Message.RecipientType.TO, new InternetAddress(mail.getToMail()));

// 5,设置邮件的内容
// 设置主题
message.setSubject(mail.getSubject());
// 设置信件内容
// message.setText(mailContent); //发送 纯文本 邮件 todo
message.setContent(mail.getContent(), "text/html;charset=utf-8"); // 发送HTML邮件,内容样式比较丰富
// 设置发信时间
message.setSentDate(new Date());

// 6,存储邮件信息
message.saveChanges();

// 7,发送邮件
Transport transport = session.getTransport();
//		形如:transport.connect("smtp.qq.com", 465, mail.getUsername(), mail.getPassword());//连接到QQ邮箱服务器
transport.connect(mail.getStmpType(), mail.getPort(), mail.getUsername(), mail.getPassword());//连接到邮箱服务器
//		transport.connect(user, password);
transport.sendMessage(message, message.getAllRecipients());// 发送邮件,其中第二个参数是所有已设好的收件人地址
transport.close();
}
}


4,程序中需要注意的地方?

1)Mail实体类中含有的字段简介

fromMail:发信人邮箱号

user:现在要求fromMail和user要保持一致
password:为从腾讯获得的授权码
toMail:收件人的邮箱
mailTiele:邮件主题
mailContent:邮件内容
smtpType:邮件发送协议
port:邮箱服务器端口

2)qq邮箱需要使用SSL,端口号为465或587;

props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.port", "465");


3)建立连接connect时要指出使用的协议

transport.connect("smtp.qq.com", 465, user, password);//连接到QQ邮箱服务器


三、第三方程序利用常用邮箱发送邮件总结
1,客户端登陆邮箱时,例如登陆qq邮箱,网易邮箱等,登陆时用的密码都不是原来的密码,而是利用官方生成的授权码进行登陆的
2,不同的邮箱使用的邮件发送协议不同:
qq:stmp.qq.com;端口号:465或587;需要使用SSL;qq邮箱授权码:***
163:stmp.163.com;端口号:25;不需要使用SSL;163邮箱授权码:**
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: