1.背景:很多web应用在开发的时候都需要集成邮件发送功能;例如新用户注册欢迎邮件;
2.邮件简介:
学习目标:
邮件服务器:邮局;
邮件的发送过程:
邮件的协议(重点):
SMTP:Simple Message Transfer Protocal 简单消息传输协议(邮件发送协议)
默认用的端口:25
POP:Post Office Protocal 邮局协议(接收邮件协议)
默认用的端口:110
手工发送邮件:
前提:a、使用telnet发送,必须有telnet客户端
b、准备两个邮箱:[email protected] iamsorry
[email protected] iamsorry
发送邮件的邮箱账户名和密码需要进行Base64编码:
itheimacloud aXRoZWltYWNsb3Vk
iamsorry aWFtc29ycnk=
c、知道使用的发送服务器和接收服务器的地址
POP3服务器:pop.163.com SMTP服务器:smtp.163.com
SMTP协议:
ehlo XXX 向发送服务器打招呼
auth login 向发送服务器请求身份认证
mail from:<[email protected]> 发件人
rcpt to:<[email protected]> 收件人
data 邮件内容开始标记
--------------
邮件内容:要符合规范RFC822规范
from:[email protected](发件人)
to:[email protected](收件人)
subject:this is my first email(标题)
(正文内容)
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbb
--------------
. 邮件内容结束
POP协议:
3.邮件发送过程:
4.JavaMail发送邮件:
1、简介:
JavaMail是一套发送邮件的规范,属于JavaEE技术之一。
2、JavaMail环境的搭建
mail.jar
jaf.jar(JDK5-):Java Activation Framework JavaMail中用它读取磁盘文件
3、JavaMail中的核心类
Message:代表着一封邮件,实现类MimeMessage
Properties(配置文件内容或此类的实例对象属性设定)
mail.smtp.host 指定连接的邮件服务器主机名
mail.transport.protocol 指定采用的邮件发送协议
mail.store.protocol 指定采用的邮件接收协议
mail.smtp.auth 指定客户端是否向邮件服务器提交认证
1 import java.io.FileOutputStream; 2 import java.util.Properties; 3 4 import javax.mail.Message; 5 import javax.mail.Session; 6 import javax.mail.internet.InternetAddress; 7 import javax.mail.internet.MimeMessage; 8 9 //利用JavaMailAPI创建一封只有文本内容的邮件 10 public class MailDemo1 { 11 12 public static void main(String[] args) throws Exception { 13 Properties props = new Properties();//不设置任何配置,发送时需要 14 Session session = Session.getInstance(props); 15 MimeMessage msg = new MimeMessage(session); 16 //设置发件人 17 msg.setFrom(new InternetAddress("[email protected]")); 18 //设置收件人:正常送(TO)、抄送(CC)、密送(BCC) 19 msg.setRecipients(Message.RecipientType.TO, "[email protected]"); 20 //设置主题 21 msg.setSubject("JavaMail发送的邮件"); 22 //设置邮件正文内容 23 msg.setText("hello"); 24 msg.saveChanges(); 25 //存到磁盘上:邮件文件的扩展名*.eml 26 msg.writeTo(new FileOutputStream("d:/1.eml")); 27 28 } 29 30 }
MailDemo1
1 import java.util.Properties; 2 3 import javax.mail.Message; 4 import javax.mail.Session; 5 import javax.mail.Transport; 6 import javax.mail.internet.InternetAddress; 7 import javax.mail.internet.MimeMessage; 8 9 public class SendMail1 { 10 11 public static void main(String[] args) throws Exception { 12 Properties props = new Properties();//不设置任何配置,发送时需要 13 props.setProperty("mail.host", "smtp.163.com"); 14 props.setProperty("mail.transport.protocol", "smtp"); 15 props.setProperty("mail.smtp.auth", "true");//请求认证,与JavaMail的实现有关 16 Session session = Session.getInstance(props); 17 session.setDebug(true);//调试模式 18 MimeMessage msg = new MimeMessage(session); 19 //设置发件人 20 msg.setFrom(new InternetAddress("[email protected]")); 21 //设置收件人:正常送(TO)、抄送(CC)、密送(BCC) 22 msg.setRecipients(Message.RecipientType.TO, "[email protected]"); 23 //设置主题 24 msg.setSubject("JavaMail发送的邮件"); 25 //设置邮件正文内容 26 msg.setText("hello"); 27 msg.saveChanges(); 28 //发送邮件 29 Transport ts = session.getTransport(); 30 ts.connect("itheimacloud", "iamsorry"); 31 ts.sendMessage(msg, msg.getAllRecipients()); 32 } 33 34 }
SendMail1
3.1只有文本的邮件
3.2文本中内嵌图片的邮件
3.3文本中内嵌图片还有附件的邮件
5.邮件中的编码问题:
a、附件的名称不对
b、中文乱码问题
主题:一般没有问题
文本内容:
附件名称:
6.利用Tomcat的JNDI容器管理JavaMail中的session:
第一步:把javamail的jar包拷贝到Tomcat\lib目录下
第二步:在引用的META-INF目录下,建立一个context.xml的配置文件,内容如下
第三步:在web环境下通过JNDI获取JavaMail的Session
字节码冲突:javax.mail.Session.class有两处。干掉一处即可(只有干掉自己应用中的mail.jar)
原文地址:https://www.cnblogs.com/biaogejiushibiao/p/9356713.html