码迷,mamicode.com
首页 > 其他好文 > 详细

邮件开发

时间:2018-07-24 00:47:06      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:ams   问题   tde   核心   字节码   instance   get   ati   main   

1.背景:很多web应用在开发的时候都需要集成邮件发送功能;例如新用户注册欢迎邮件;

2.邮件简介:

        学习目标:

        邮件服务器:邮局;

        技术分享图片

 

        邮件的发送过程:

        技术分享图片

        技术分享图片

 

 

        邮件的协议(重点)

 

SMTP:Simple Message Transfer Protocal 简单消息传输协议(邮件发送协议)

 

默认用的端口:25

 

POP:Post Office Protocal 邮局协议(接收邮件协议)

 

默认用的端口:110

 

技术分享图片

 技术分享图片

 

        手工发送邮件:

 

        前提:a、使用telnet发送,必须有telnet客户端

         技术分享图片

 

 

        b、准备两个邮箱:itheimacloud@163.com       iamsorry

                  itheima14@163.com  iamsorry

        发送邮件的邮箱账户名和密码需要进行Base64编码:

          itheimacloud                 aXRoZWltYWNsb3Vk

          iamsorry        aWFtc29ycnk=

           c、知道使用的发送服务器和接收服务器的地址

 

        POP3服务器:pop.163.com     SMTP服务器:smtp.163.com   

 

 

 

 

 

      SMTP协议:

 

      ehlo XXX        向发送服务器打招呼

 

      auth login              向发送服务器请求身份认证

 

      mail from:<itheimacloud@163.com>   发件人

 

      rcpt to:<itheima14@163.com>             收件人

 

      data                                    邮件内容开始标记

 

      --------------

 

      邮件内容:要符合规范RFC822规范

 

      from:itheimacloud@163.com(发件人)

 

      to:itheima14@163.com(收件人)

 

      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("itheimacloud@163.com"));
18         //设置收件人:正常送(TO)、抄送(CC)、密送(BCC)
19         msg.setRecipients(Message.RecipientType.TO, "itheima14@163.com");
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("itheimacloud@163.com"));
21         //设置收件人:正常送(TO)、抄送(CC)、密送(BCC)
22         msg.setRecipients(Message.RecipientType.TO, "itheima14@163.com");
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)

 

邮件开发

标签:ams   问题   tde   核心   字节码   instance   get   ati   main   

原文地址:https://www.cnblogs.com/biaogejiushibiao/p/9356713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!