Java 发送邮件
来源:互联网 发布:欧美品牌男装淘宝 编辑:程序博客网 时间:2024/04/30 08:48
发送邮件,就目前楼主所知有JavaMail HtmlMail,也可以通过代理商如sendCloud、阿里云(这个我没用过)。
这里需要注意:
1 我们发信的邮箱必须必须开启smpt服务,如果使用163,在邮件中心选择POP3/SMTP/IMAP ,然后就行设置,163会要求你输入一个密码,这个密码是我们后期要用到的。
2 jar包:javamail.jar javamail.jar 包链接 以及它所依赖的包 activation.jar activation.jar包链接 (可在官网下载)
下面主要介绍一下JavaMail如何发送邮件
1 邮件传输协议
邮件传输协议分为两种:SMTP 和POP3 。
SMTP的端口在25,POP3端口为 110。我们发信采用SMTP,而收信则是由POP3负责。
请看下面邮件发送和接受原理图:
这里我们可以很清楚的看到发件是采用SMTP协议,收信是采用POP3协议。
大家如果有兴趣可以使用telnet 尝试手动发送邮件,这里我就不多介绍了。
2 JavaMail创建邮件和发送邮件
首先我们介绍一下JavaMail的核心api
主要包括一下几大类:Session Message Address Authenticator Transport
1 Session(邮件会话)
进行收发邮件的工作都是基于这个会话的
通过java.util.Properties 对象获得邮件服务器、用户名、密码等
2 Message
我们使用Message的子类MimeMessage来设置邮件的内容,我们通过子类的构造函数将session参数传入。
如下:
//创建邮件对象 MimeMessage message=new MimeMessage(session); //指明邮件发送人 message.setFrom(new InternetAddress("邮件发送方 //指明邮件的收件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress("邮件接受方") message.setSubject("用户验证"); //邮件的文本内容 message.setContent("你好啊,请问你今年多大了","text/html;charset=UTF-8");
3 Address
邮件地址类,如我上面代码说是,发送和接受的邮件地址都是通过此类来完成。
Address fromAddr=new InternetAddress("xxx@163.com");
设置收件人:
message.setRecipient(Message.RecipientType.TO, new InternetAddress("邮件接受方");
4 Transport
此类实现SMTP协议来发送邮件
Transport transport = session.getTransport();transport.connect(host, username, password);transport.sendMessage(message, message.getAllRecipients());transport.close();
我们可以通过如下原理图更好理解:
3 简单邮件发送案例
package com.mao.smtp;import java.util.Properties;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.NoSuchProviderException;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 SendMail { public static void main(String[] args) throws AddressException, MessagingException { Properties prop=new Properties(); prop.setProperty("mail.host", "smtp.163.com"); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); //使用javamail发送邮件的5个步骤 Session session=Session.getInstance(prop); //开启session的debug模式,这样可以查看程序发送emial的运行状态 session.setDebug(true); //通过session得到transport对象 Transport ts=null; try { ts = session.getTransport(); //使用邮箱的用户名和密码联上邮件服务器,发送人需要提交smtp的用户名和密码 ts.connect("smtp.163.com","发送方邮箱","密码"); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } //创建邮件 Message message=createSimpleMail(session); //发送邮件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); } private static Message createSimpleMail(Session session) throws AddressException, MessagingException { //创建邮件对象 MimeMessage message=new MimeMessage(session); //指明邮件发送人 message.setFrom(new InternetAddress("发送发邮箱")); //指明邮件的收件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress("接受方邮箱")); message.setSubject("用户验证"); //邮件的文本内容 message.setContent("你好啊,请问你今年多大了","text/html;charset=UTF-8"); //返回创建好的邮件对象 return message; }}
4 注意事项
如果在控制台查看邮件发送成功,但是邮箱未收到。这是我们可以在垃圾箱查找。
lz是发送到自己qq邮箱,但被认为是垃圾邮箱,而直接发到垃圾箱。
如何避免:
1尽量少发敏感词
2 如果主题设置包含英文,也会是为垃圾邮箱,所以主题设置为中文(设为中文后,就能接收到了)
3内容尽量多点(这个我没测试)
- [java]Java发送邮件
- java 邮件发送 --- 简单的邮件发送
- JAVA发送邮件及springboot发送邮件
- 用java发送邮件
- 用Java发送邮件
- java发送邮件源码
- java发送邮件
- Java发送邮件
- Java发送邮件程序
- java发送Email邮件
- 怎样用java发送邮件
- 利用java发送邮件
- java 邮件发送
- java邮件发送
- java邮件发送
- java定时发送邮件
- java发送邮件代码
- Java Mail 发送邮件
- 代码重构(二):类重构规则
- 使用高德地图Web服务-POI搜索
- node.js 使用crypto模块进行RSA加解密操作
- D
- Listary免费版下载与安装
- Java 发送邮件
- Unity 制作font字体
- 《MySQL入门很简单》学习笔记(17)之第17章MySQL日志(关键词:MySQL/日志)
- 圆、矩形、线段碰撞检测
- 文章标题
- php 将debug信息写入文件的函数($_SERVER['PHP_SELF'])
- python运维_fourth_chapter(1)
- 析构函数为什么会自动再调用父类的析构函数?
- 服务器搬迁清单需要启动任务以及恢复办法