JavaMail发送邮件api实例

邮件发送程序

我们先使用JavaMail API发送一封简单的邮件,步骤为

  • 创建包含邮件服务器的网络连接信息的Session对象。
  • 创建代表邮件内容的Message对象。
  • 创建Transport对象、连接服务器、发送Message、关闭连接。

这样使用JavaMail API发送一封最简单的邮件(纯文本邮件)的代码为:

public class SendMail {

    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();
        prop.setProperty("mail.smtp.host", "smtp.163.com");
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");

        Session session = Session.getInstance(prop); // 创建出与指定邮件服务器会话的session
        /*
         * 为了看清javamail这套API到底是如何向服务器发邮件的,可以把session的Debug开关打开,
         * 把这个调试开关打开,javamail这套API会把它与服务器的交互过程打印在命令行窗口
         */
        session.setDebug(true);
        Message message = createMessage(session);

        Transport ts = session.getTransport();
        ts.connect("yerenyuan10001", "邮箱登录密码"); // 连接上邮件服务器,其内部会自动帮你进行base64编码
        ts.sendMessage(message, message.getAllRecipients()); // 向谁发送一封邮件
        ts.close(); // 断开与服务器的连接
    }

    private static Message createMessage(Session session) throws AddressException, MessagingException, UnsupportedEncodingException {
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("[email protected]"));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
        message.setSubject("love");

        message.setContent("hello hello liayun", "text/html");
        message.saveChanges();
        return message;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

提示:创建出包含邮件服务器的网络连接信息的Session对象之后,为了看清JavaMail这套API到底是如何向邮件服务器发送邮件的,可以把session的Debug开关打开,把这个调试开关打开后,JavaMail这套API会把它与邮件服务器的交互过程打印在Eclipse的控制台上。 
运行以上程序,然后登陆到[email protected]邮箱当中,就可以收取到由[email protected]发送的Email了,如下图所示: 
这里写图片描述
接着我们使用JavaMail API发送一封复杂邮件,如下:

public class SendMail {

    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();
        prop.setProperty("mail.smtp.host", "smtp.163.com");
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");

        Session session = Session.getInstance(prop); // 创建出与指定邮件服务器会话的session
        /*
         * 为了看清javamail这套API到底是如何向服务器发邮件的,可以把session的Debug开关打开,
         * 把这个调试开关打开,javamail这套API会把它与服务器的交互过程打印在命令行窗口
         */
        session.setDebug(true);
        Message message = createMessage(session);

        Transport ts = session.getTransport();
        ts.connect("yerenyuan10001", "邮箱登录密码"); // 连接上邮件服务器,其内部会自动帮你进行base64编码
        ts.sendMessage(message, message.getAllRecipients()); // 向谁发送一封邮件
        ts.close(); // 断开与服务器的连接
    }

    private static Message createMessage(Session session) throws AddressException, MessagingException, UnsupportedEncodingException {
        // 创建邮件
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress("[email protected]"));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
        message.setSubject("我爱你,那个人");

        // 创建bodypart封装正文
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("我是真的爱你,你知道吗?<img src='cid:1.jpg'>", "text/html;charset=UTF-8");

        // 创建bodypart封装图片
        MimeBodyPart image = new MimeBodyPart();
        image.setDataHandler(new DataHandler(new FileDataSource("src/1.jpg")));
        image.setContentID("1.jpg");

        // 创建bodypart封装附件
        MimeBodyPart attach = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src/爱的秘密蓝调口琴曲.mp3"));
        attach.setDataHandler(dh);
        // System.out.println(dh.getName()); // 数据处理器获取附件名时没有中文乱码问题,显示正常

        // 只要调用了setFileName方法,它就会自动帮你生成Content-Disposition这个头字段
        attach.setFileName(MimeUtility.encodeText(dh.getName())); // 设置附件名的时候出现中文乱码问题了,该怎么解决呢?

        // 描述数据关系
        MimeMultipart content = new MimeMultipart();
        content.addBodyPart(text);
        content.addBodyPart(image);
        content.setSubType("related");

        MimeBodyPart mbp = new MimeBodyPart();
        mbp.setContent(content);

        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(mbp);
        mm.addBodyPart(attach);
        mm.setSubType("mixed");

        message.setContent(mm);
        message.saveChanges();

        return message;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

运行以上程序,然后登陆到[email protected]邮箱当中,就可以收取到由[email protected]发送的Email了,

猜你喜欢

转载自blog.csdn.net/wonderful_life_mrchi/article/details/77886820