• 基于JavaMail的Java邮件发送:简单邮件发送Demo


    转载:http://blog.csdn.net/xietansheng/article/details/51673073

    JavaMail 下载地址: https://github.com/javaee/javamail/releases

    这里我下载的版本是 1.6.0 版本,包含了 SMTP, IMAP, 和 POP3 协议的实现的 jar 包

    特别注意:

    • 本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用 JavaMail 1.6.0 版本再进行尝试。
    • 使用 JavaMail 1.6.0 要求的 JDK 版本必须是 JDK 1.7 以上(建议使用最新版 JDK)。
    • 不要直接就完完全全复制我的代码,需要 修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送,内容一致,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。
      1 /**
      2  * 从网易邮箱发送邮件至QQ邮箱Demo
      3  */
      4 package com.pp.test;
      5 
      6 import javax.mail.Session;
      7 import javax.mail.Transport;
      8 import javax.mail.internet.InternetAddress;
      9 import javax.mail.internet.MimeMessage;
     10 import java.util.Date;
     11 import java.util.Properties;
     12 
     13 /**
     14  * JavaMail 版本: 1.6.0
     15  * JDK 版本: JDK 1.7 以上(必须)
     16  */
     17 public class Main {
     18 
     19     // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
     20     // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),
     21     //     对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
     22     /**
     23      * 设置smtp服务器以及邮箱的帐号和密码
     24      * 用QQ 邮箱作为发生者不好使 (原因不明)
     25      * 163 邮箱可以,但是必须开启  POP3/SMTP服务 和 IMAP/SMTP服务
     26      * 因为程序属于第三方登录,所以登录密码必须使用163的授权码
     27      */
     28      // 注意: [授权码和你平时登录的密码是不一样的]
     29     public static String myEmailAccount = "*******@163.com";
     30     public static String myEmailPassword = "*******";
     31 
     32     // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
     33     // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
     34     public static String myEmailSMTPHost = "smtp.163.com";
     35 
     36     // 收件人邮箱(替换为自己知道的有效邮箱)
     37     public static String receiveMailAccount = "*******@qq.com";
     38 
     39     public static void main(String[] args) throws Exception {
     40         // 1. 创建参数配置, 用于连接邮件服务器的参数配置
     41         Properties props = new Properties();                    // 参数配置
     42         props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
     43         props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
     44         props.setProperty("mail.smtp.auth", "true");            // 需要请求认证  需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
     45 
     46         // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
     47         //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
     48         //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
     49         /*
     50         // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
     51         //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
     52         //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
     53         final String smtpPort = "465";
     54         props.setProperty("mail.smtp.port", smtpPort);
     55         props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
     56         props.setProperty("mail.smtp.socketFactory.fallback", "false");
     57         props.setProperty("mail.smtp.socketFactory.port", smtpPort);
     58         */
     59 
     60         // 2. 根据配置创建会话对象, 用于和邮件服务器交互
     61         Session session = Session.getInstance(props);
     62         // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
     63         // 用(你可以在控制台(console)上看到发送邮件的过程)
     64         session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
     65 
     66         // 3. 创建一封邮件
     67         MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
     68 
     69         // 4. 根据 Session 获取邮件传输对象
     70         Transport transport = session.getTransport();
     71 
     72         // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
     73         //
     74         //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
     75         //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
     76         //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
     77         //
     78         //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
     79         //           (1) 邮箱没有开启 SMTP 服务;
     80         //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
     81         //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
     82         //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
     83         //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
     84         //
     85         //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
     86         transport.connect(myEmailAccount, myEmailPassword);
     87 
     88         // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
     89         transport.sendMessage(message, message.getAllRecipients());
     90 
     91         // 7. 关闭连接
     92         transport.close();
     93     }
     94 
     95     /**
     96      * 创建一封只包含文本的简单邮件
     97      *
     98      * @param session 和服务器交互的会话
     99      * @param sendMail 发件人邮箱
    100      * @param receiveMail 收件人邮箱
    101      * @return
    102      * @throws Exception
    103      */
    104     public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
    105         // 1. 创建一封邮件
    106         MimeMessage message = new MimeMessage(session);
    107 
    108         // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
    109         message.setFrom(new InternetAddress(sendMail, "发送人昵称", "UTF-8"));
    110 
    111         // 3. To: 收件人(可以增加多个收件人、抄送、密送)
    112         message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "接收人昵称", "UTF-8"));
    113 
    114         // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
    115         message.setSubject("标题", "UTF-8");
    116 
    117         // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
    118         message.setContent("邮件的文本内容", "text/html;charset=UTF-8");
    119 
    120         // 6. 设置发件时间
    121         message.setSentDate(new Date());
    122 
    123         // 7. 保存设置
    124         message.saveChanges();
    125 
    126         return message;
    127     }
    128 
    129 }

    包含文本、图片、附件 的复杂邮件的创建请看下一篇:基于 JavaMail 的 Java 邮件发送:复杂邮件发送

    谢谢CSDN提供的这么好的Demo!

  • 相关阅读:
    递归函数及Java范例
    笔记本的硬盘坏了
    “References to generic type List should be parameterized”
    配置管理软件(configuration management software)介绍
    WinCE文件目录定制及内存调整
    使用Silverlight for Embedded开发绚丽的界面(3)
    wince国际化语言支持
    Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
    WinCE Heartbeat Message的实现
    使用Silverlight for Embedded开发绚丽的界面(2)
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/7897147.html
Copyright © 2020-2023  润新知