`

java 发送邮件实测示例 (转)

 
阅读更多
只需要引用jar包即可

package mailSend;
import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

public class Mail {

    // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
    // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),
    //     对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。暂时163用到,阿里邮箱未用到
    public static String myEmailAccount = "huluyisheng@163.com";
    public static String myEmailPassword = "sssss";

    // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
    // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
    public static String myEmailSMTPHost = "smtp.163.com";

    // 收件人邮箱(替换为自己知道的有效邮箱)
    public static String receiveMailAccount = "641615638@qq.com;huluyisheng@163.com";

    public static void main(String[] args) throws Exception {
        // 1. 创建参数配置, 用于连接邮件服务器的参数配置
        Properties props = new Properties();                    // 参数配置
        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证

        // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
        //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
        //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
        /*
        // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
        //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
        //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
        final String smtpPort = "465";
        props.setProperty("mail.smtp.port", smtpPort);
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.socketFactory.port", smtpPort);
        */

        // 2. 根据配置创建会话对象, 用于和邮件服务器交互
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log

        // 3. 创建一封邮件
        MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);

        // 4. 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();

        // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
        //
        //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
        //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
        //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
        //
        //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
        //           (1) 邮箱没有开启 SMTP 服务;
        //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
        //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
        //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
        //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
        //
        //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
        transport.connect(myEmailAccount, myEmailPassword);

        // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
        transport.sendMessage(message, message.getAllRecipients());

        // 7. 关闭连接
        transport.close();
    }

    /**
     * 创建一封只包含文本的简单邮件
     *
     * @param session 和服务器交互的会话
     * @param sendMail 发件人邮箱
     * @param receiveMail 收件人邮箱
     * @return
     * @throws Exception
     */
    public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
        // 1. 创建一封邮件
        MimeMessage message = new MimeMessage(session);

        // 2. From: 发件人
        message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8"));

        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
    String[] signalReceiveMail = receiveMail.split(";");
        InternetAddress[] address = new InternetAddress[signalReceiveMail.length];
        for (int i = 0; i < signalReceiveMail.length; i++) {
        address[i] = new InternetAddress(signalReceiveMail[i]);
        }
        message.setRecipients(MimeMessage.RecipientType.TO, address);

        // 4. Subject: 邮件主题
        message.setSubject("打折钜惠", "UTF-8");

        // 5. Content: 邮件正文(可以使用html标签)
        message.setContent("XX用户你好, 今天全场5折, 快来抢购, 错过今天再等一年。。。", "text/html;charset=UTF-8");

        // 6. 设置发件时间
        message.setSentDate(new Date());

        // 7. 保存设置
        message.saveChanges();

        return message;
    }

}
分享到:
评论

相关推荐

    PD4ML 实测Java将HTML导出为PDF 成功解决中文乱码问题

    最后,我们来看"Pdf4Html.java",这应该是一个示例程序或者模板代码,演示了如何使用PD4ML API将HTML转换为PDF,并解决中文乱码问题。在这个Java源文件中,可能会包含如下关键步骤: 1. 引入必要的库:导入PD4ML和...

    java实现的等值线画法

    7. **应用示例**: - 气象预报:绘制温度、湿度等值线,帮助预测天气模式。 - 地形分析:展示地形高度的变化,用于地质勘探或地图制作。 - 工程设计:在电路设计或流体力学模拟中,展示不同参数的空间分布。 ...

    Java编译器eclipse,实测能用

    本资源提供的“Java编译器eclipse”是一个经过实测可用的Eclipse版本,适合那些需要进行Java开发的用户。 Eclipse IDE提供了丰富的特性,以提高开发者的效率和代码质量。首先,它具有内置的源代码编辑器,支持语法...

    阿里云发送短信C++源码、实测通过

    本示例主要关注如何使用C++编程语言在Windows环境下通过VS2019集成开发环境与阿里云API接口进行集成,实现短信的发送功能。 首先,你需要在阿里云官网注册账号并创建一个服务,获取到相应的Access Key ID和Access ...

    C++邮件发送(多附件) 简单方便 直接可用

    在C++编程环境中,发送邮件并附带多个附件是一项常见的任务,特别是在开发自动化系统或需要与用户进行异步通信的应用程序中。这个标题提到的"CSmtp_v1_4"是一个C++库,用于实现SMTP(Simple Mail Transfer Protocol...

    aspose.cell破解版for java

    aspose.cell for java实测excel转pdf破解版,仅用几行代码转换,希望可以帮到大家

    幕墙工程实测实量.pdf

    【幕墙工程实测实量详解】 幕墙工程是建筑外墙装饰的重要组成部分,其施工质量直接影响到建筑的安全性、美观性和耐久性。实测实量是检验幕墙工程质量的关键环节,涉及多个方面,包括玻璃幕墙、金属幕墙、石材幕墙...

    实测实量及实测实量与工程款支付挂钩管理办法.pdf

    《实测实量及实测实量与工程款支付挂钩管理办法》是一份旨在提升建筑工程质量的重要文件,其主要内容包括实测实量的管理规范以及如何将实测结果与工程款项支付相结合的策略。 实测实量是建筑行业中用于监控工程质量...

    java等值线生成法

    这些数据可以来源于各种模拟或实测结果。Java程序需要读取并存储这些数据,可能需要使用如`BufferedReader`或`Scanner`类来读取文本文件,或者使用`ObjectInputStream`来处理二进制格式。 2. **算法选择**:等值线...

    Java8新特性实测源码下载

    1. Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 接口中的默认方法与静态方法 6. 新时间日期 API 7. 其他新特性 博文说明: ...

    CAD lisp 绘制实测纵横断面

    CAD lisp 绘制实测纵横断面CAD lisp 绘制实测纵横断面CAD lisp 绘制实测纵横断面CAD lisp 绘制实测纵横断面CAD lisp 绘制实测纵横断面CAD lisp 绘制实测纵横断面

    java rxtxCommon 串口开发齐全资源

    这个压缩包“java rxtxCommon 串口开发齐全资源”提供了完整的Java串口开发环境,包括库文件、模拟工具以及实测可用的示例代码,方便开发者进行串口数据的发送和接收。 首先,让我们详细了解RXTX库。RXTX是Java中的...

    实测剖面MapGis投影成图

    GeoTools是一个开源Java库,专为构建地理空间应用程序而设计。它支持多种GIS标准,如OGC(开放地理空间联盟)的标准,包括WMS(Web Map Service)、WFS(Web Feature Service)等。GeoTools 2.0测试版可能包含了对...

    java前后端加密资料及说明

    1. **前端加密**:前端通常使用JavaScript实现轻量级的加密,将敏感数据(如用户密码)使用AES-128-CBC加密后发送到服务器,确保数据在网络传输过程中不被窃取。 2. **密钥管理**:为了安全地使用AES,必须有一个...

    SendEmail.java

    java编写的发送邮件工具类,实测可用,邮箱需获取授权码,具体步骤可自行百度(直接搜索qq邮箱授权码即可)

    实测断面自动概化辅助系统——程序文件_实测河道断面概化_

    本软件基于水力学等理论与方法,进行河道实测断面过水面积、湿周、底高程、口宽、流量等计算,然后基于流量及口宽误差最小原则,把实测断面概化为标准的梯形断面,并计算得到梯形断面的底宽、底高程、边坡等主要参数...

    实测!打开Java开发所有软件到底耗费多少电脑性能?8G到底够不够用?会不会卡?程序员选电脑编程可以参考一波!

    实测!打开Java开发所有软件到底耗费多少电脑性能_8G到底够不够用_会不会卡_程序员选电脑编程可以参考一波!

    整合版word转pdf的jar包.rar

    这个“整合版word转pdf的jar包.rar”是一个Java开发的工具包,它提供了将Word文档转换为PDF格式的功能。下面将详细讨论相关知识点。 1. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,它具有跨平台的...

    Java 模拟Ajax POST GET 提交代码

    Java 模拟Ajax POST GET 提交代码,实测很好用。

    项目工程质量实测实量操作手册.ppt

    《项目工程质量实测实量操作手册》是一份指导在建工程项目质量监测的重要文档,旨在确保工程质量达到预定标准。手册涵盖了从工程的各个阶段到不同类型的工程质量检查,包括混凝土结构、砌体、抹灰、设备安装、涂饰、...

Global site tag (gtag.js) - Google Analytics