邮件开发

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)

猜你喜欢

转载自www.cnblogs.com/biaogejiushibiao/p/9356713.html