zoukankan      html  css  js  c++  java
  • 11.Java邮件发送

    一.邮件收发

    1.什么是电子邮件

    2.传输协议

    3.邮件收发原理

    二.开发

    1.导入jar包

    • mail.jar

    • activation.jar

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>

    注:QQ邮箱开启POP3和SMTP服务还有授权码

    2.案例一:发送简单邮件

     1 import com.sun.mail.util.MailSSLSocketFactory;
     2 
     3 import javax.mail.*;
     4 import javax.mail.internet.InternetAddress;
     5 import javax.mail.internet.MimeMessage;
     6 import java.io.UnsupportedEncodingException;
     7 import java.security.GeneralSecurityException;
     8 import java.util.Properties;
     9 
    10 //发送一份简单的邮件
    11 public class MailDemo01 {
    12 
    13     public static void main(String[] args) throws GeneralSecurityException, MessagingException, UnsupportedEncodingException {
    14 
    15         Properties prop = new Properties();
    16         prop.setProperty("mail.host","smtp.qq.com");        //设置QQ邮箱服务器
    17         prop.setProperty("mail.transport.protocol","smtp"); //邮件发送协议
    18         prop.setProperty("mail.smtp.auth","true");          //需要验证用户名和密码
    19 
    20         //关于QQ邮箱,还要设置SSL加密,加上以下代码即可,只有QQ邮箱需要其他邮箱不需要
    21         MailSSLSocketFactory sf = new MailSSLSocketFactory();
    22         sf.setTrustAllHosts(true);
    23         prop.put("mail.smtp.ssl.enable","true");
    24         prop.put("mail.smt;.ssl.socketFactory",sf);
    25 
    26 
    27         //使用JavaMail发送邮件5个步骤
    28         //1.创建定义整个应用程序所需的环境信息的Session对象
    29 
    30         //QQ 才需要,其他邮箱不需要
    31         Session session = Session.getDefaultInstance(prop, new Authenticator() {
    32             @Override
    33             protected PasswordAuthentication getPasswordAuthentication() {
    34                 //发件人邮件用户名和授权码
    35                 return new PasswordAuthentication("464407764@qq.com","hmiauriqbvzmbhcf");
    36             }
    37         });
    38 
    39         //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    40         session.setDebug(true);
    41 
    42         //2.通过Session得到transport对象
    43         Transport ts = session.getTransport();
    44 
    45         //3.使用邮箱的用户名和授权码连上邮件服务器
    46         ts.connect("smtp.qq.com","464407764@qq.com","hmiauriqbvzmbhcf");
    47 
    48         //4.创建邮件:写邮件
    49         MimeMessage message = new MimeMessage(session);
    50 
    51         //指明邮件的发送者
    52         message.setFrom(new InternetAddress("464407764@qq.com","海天之恋", "UTF-8"));
    53 
    54         //指明邮件的接收者
    55         message.setRecipient(Message.RecipientType.TO,new InternetAddress("18855162320@163.com"));
    56 
    57         //邮件标题
    58         message.setSubject("这是简单邮件案例的邮件标题!");
    59 
    60         //邮件内容
    61         message.setContent("<h1 style='color: red'>这是简单邮件案例的邮件内容</h1>","text/html;charset=UTF-8");
    62 
    63         //5.发送邮件
    64         ts.sendMessage(message,message.getAllRecipients());
    65 
    66         //6.关闭连接
    67         ts.close();
    68 
    69     }
    70 }

    3.案例二:发送复杂邮件(带附件和图片)

      1 import com.sun.mail.util.MailSSLSocketFactory;
      2 
      3 import javax.activation.DataHandler;
      4 import javax.activation.FileDataSource;
      5 import javax.mail.*;
      6 import javax.mail.internet.InternetAddress;
      7 import javax.mail.internet.MimeBodyPart;
      8 import javax.mail.internet.MimeMessage;
      9 import javax.mail.internet.MimeMultipart;
     10 import java.io.UnsupportedEncodingException;
     11 import java.security.GeneralSecurityException;
     12 import java.util.Properties;
     13 
     14 //发送一份复杂的邮件
     15 public class MailDemo02 {
     16 
     17     public static void main(String[] args) throws GeneralSecurityException, MessagingException, UnsupportedEncodingException {
     18 
     19         Properties prop = new Properties();
     20         prop.setProperty("mail.host","smtp.qq.com");        //设置QQ邮箱服务器
     21         prop.setProperty("mail.transport.protocol","smtp"); //邮件发送协议
     22         prop.setProperty("mail.smtp.auth","true");          //需要验证用户名和密码
     23 
     24         //关于QQ邮箱,还要设置SSL加密,加上以下代码即可,只有QQ邮箱需要其他邮箱不需要
     25         MailSSLSocketFactory sf = new MailSSLSocketFactory();
     26         sf.setTrustAllHosts(true);
     27         prop.put("mail.smtp.ssl.enable","true");
     28         prop.put("mail.smt;.ssl.socketFactory",sf);
     29 
     30 
     31         //使用JavaMail发送邮件5个步骤
     32         //1.创建定义整个应用程序所需的环境信息的Session对象
     33 
     34         //QQ 才需要,其他邮箱不需要
     35         Session session = Session.getDefaultInstance(prop, new Authenticator() {
     36             @Override
     37             protected PasswordAuthentication getPasswordAuthentication() {
     38                 //发件人邮件用户名和授权码
     39                 return new PasswordAuthentication("464407764@qq.com","hmiauriqbvzmbhcf");
     40             }
     41         });
     42 
     43         //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
     44         session.setDebug(true);
     45 
     46         //2.通过Session得到transport对象
     47         Transport ts = session.getTransport();
     48 
     49         //3.使用邮箱的用户名和授权码连上邮件服务器
     50         ts.connect("smtp.qq.com","464407764@qq.com","hmiauriqbvzmbhcf");
     51 
     52         //4.创建邮件:写邮件
     53         MimeMessage message = new MimeMessage(session);
     54 
     55         //指明邮件的发送者
     56         message.setFrom(new InternetAddress("464407764@qq.com","海天之恋", "UTF-8"));
     57 
     58         //指明邮件的接收者
     59         message.setRecipient(Message.RecipientType.TO,new InternetAddress("18855162320@163.com"));
     60 
     61         //邮件标题
     62         message.setSubject("这是复杂邮件案例的邮件标题!");
     63 
     64         //邮件内容
     65         //================================================================================
     66 
     67         //发送图片
     68 //        sendImage(message);
     69         //发送附件,图片和文本
     70         sendAttachmentsAndImage(message);
     71 
     72         //================================================================================
     73 
     74         //5.发送邮件
     75         ts.sendMessage(message,message.getAllRecipients());
     76 
     77         //6.关闭连接
     78         ts.close();
     79 
     80     }
     81 
     82     public static void sendImage(MimeMessage message) throws MessagingException {
     83         //准备图片数据
     84         MimeBodyPart image = new MimeBodyPart();
     85         DataHandler dh = new DataHandler(new FileDataSource(MailDemo02.class.getResource("/").getPath()+"/1.jpg"));//图片需要经过数据处理
     86         image.setDataHandler(dh);//在Body中放入处理过后的图片
     87         image.setContentID("myPicture");//给图片设置一个ID(随意设置)
     88 
     89         //准备正文数据
     90         MimeBodyPart text = new MimeBodyPart();
     91         text.setContent("这是一封邮件正文带图片<img src='cid:myPicture'>的邮件","text/html;charset=UTF-8");//通过cid获得ContentID
     92 
     93         //描述数据关系
     94         MimeMultipart mm = new MimeMultipart();
     95         mm.addBodyPart(text);
     96         mm.addBodyPart(image);
     97         mm.setSubType("related");
     98 
     99         //设置到消息中,保存修改
    100         message.setContent(mm);//把最后编辑好的邮件放入消息中
    101         message.saveChanges();
    102     }
    103 
    104     public static void sendAttachmentsAndImage(MimeMessage message) throws MessagingException {
    105         //图片
    106         MimeBodyPart body1 = new MimeBodyPart();
    107         body1.setDataHandler(new DataHandler(new FileDataSource(MailDemo02.class.getResource("/").getPath()+"/1.jpg")));//在Body中放入处理过后的图片
    108         body1.setContentID("myPicture");//给图片设置一个ID(随意设置)
    109 
    110         //文本
    111         MimeBodyPart body2 = new MimeBodyPart();
    112         body2.setContent("这是一封邮件正文带图片<img src='cid:myPicture'>的邮件","text/html;charset=UTF-8");//通过cid获得ContentID
    113 
    114         //附件
    115         MimeBodyPart body3 = new MimeBodyPart();
    116         body3.setDataHandler(new DataHandler(new FileDataSource(MailDemo02.class.getResource("/").getPath() + "/1.txt")));
    117         body3.setFileName("myAttachments.txt");//设置附件名
    118 
    119         //1.现将文本和图片拼装
    120         MimeMultipart multipart1 = new MimeMultipart();
    121         multipart1.addBodyPart(body2);  //文本
    122         multipart1.addBodyPart(body1);  //图片
    123         multipart1.setSubType("related");
    124 
    125         MimeBodyPart contentText = new MimeBodyPart();
    126         contentText.setContent(multipart1);
    127 
    128         //2.拼接附件
    129         MimeMultipart allFile = new MimeMultipart();
    130         allFile.addBodyPart(body3);         //附件
    131         allFile.addBodyPart(contentText);   //文本+图片
    132         allFile.setSubType("mixed");
    133 
    134         //设置到消息中,保存修改
    135         message.setContent(allFile);//把最后编辑好的邮件放入消息中
    136         message.saveChanges();
    137     }
    138     
    139 }

    4.总结

    • 在应用场景中我们一般使用多线程处理发送邮件,将主要代码放在run方法中,防止发送时卡顿。

    • 理解思路其次是程序

  • 相关阅读:
    Demo:刮刮卡橡皮擦效果
    养成良好的代码编写习惯
    我的百科
    专业英语词汇
    加载资源的类
    循环滚动翻页+居中项缩放
    学习笔记—Node中模块化规范
    学习笔记—Node中的EventLoop
    学习笔记—Node的全局对象
    学习笔记—Node的基本概念
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12319805.html
Copyright © 2011-2022 走看看