欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java mail 发送邮件

程序员文章站 2022-05-25 13:01:47
...

啥也不说了,直接放代码,一切尽在代码中。。。

1、

要发送的邮件数据对象:

public class MailData
{
    /** 发件人的用户名。 */
    private String userName;

    /** 发件的密码。 */
    private String password;
    /** 发件人的邮件地址 */
    private String mailAddress;

    /** 收件人的地址列表。 */
    private String[] receiveAddress;

    /** 发送的pop邮箱服务器地址。 */
    private String smtp;

    /** 邮件主题。 */
    private String subject;

    /** 邮件正文。 */
    private String content;

    /** 邮件正文是否是纯文本。 */
    private boolean isHtml;

    private File[] files;

    // get/set方法...
}

 

public class MailSend
{
    /**
     * 发送邮件。
     * 
     * @param data
     *            邮件内容对象。
     * @throws Exception
     */
    public void sendMail(final MailData data) throws Exception
    {
        Session session = this.getSession(data);

        Message msg = new MimeMessage(session);

        this.setMailMsg(msg, data);

        Transport.send(msg);
    }

    /**
     * 设置邮件信息。包括邮件内容、标题、发送者、接收者、附件等信息。
     * 
     * @param msg
     *            Message对象。
     * @param data
     *            邮件信息内容。
     * @throws Exception
     */
    private void setMailMsg(Message msg, MailData data) throws Exception
    {
        // 设置邮件接收者。
        msg.addRecipients(Message.RecipientType.TO, Utils.toAddress(data.getReceiveAddresses()));

        // 设置邮件发送者。
        msg.setFrom(Utils.toAddress(data.getSendAddress()));

        // 设置邮件的标题。这里最好使用setHeader的方式,使用setSubject的方式无法指定编码格式,其它语言可能会乱码。
        // 如果这里的标题太长了的话,始终会有一部分会是乱码。这点还不知道如何修改。
        msg.setHeader("Subject", MimeUtility.encodeText(data.getSubject(), "utf-8", "B"));
        // msg.setSubject(data.getSubject());

        Multipart multipart = new MimeMultipart();

        this.setMailContentPart(data, multipart);

        msg.setContent(multipart);
    }

    /**
     * 设置邮件正文和附件。
     * 
     * @param data
     *            邮件的信息内容。
     * @param multipart
     *            邮件的对象。
     */
    private void setMailContentPart(MailData data, Multipart multipart) throws Exception
    {

        // 设置邮件内容。
        MimeBodyPart bPart = new MimeBodyPart();
        if (data.isHtml())
        {
            bPart.setContent(data.getContent(), "text/html;charset=UTF-8");
        }
        else
        {
            // 以text设置时要设置编码方式,最好为utf-8,不然其它语言可能乱码。
            bPart.setText(data.getContent(), "utf8");
        }
        multipart.addBodyPart(bPart);

        // 设置邮件附件。
        if (data.getFiles() != null)
        {
            for (File f : data.getFiles())
            {
                if ((f != null) && f.isFile())
                {
                    bPart = new MimeBodyPart();
                    DataSource source = new FileDataSource(f);
                    bPart.setDataHandler(new DataHandler(source));

                    // 设置文件名时要设置编码,不然会乱码的。最好指定编码格式为utf8
                    bPart.setFileName(MimeUtility.encodeText(f.getName(), "utf-8", "B"));
                    multipart.addBodyPart(bPart);
                }
            }
        }
    }

    /**
     * 根据邮件的服务器信息获取Session对象。
     * 
     * @param data
     *            邮件的服务器信息对象。
     * @return 返回获取的Session对象。
     */
    private Session getSession(final MailData data)
    {
        Properties pro = new Properties();
        // 设置邮件发送smtp服务器。
        pro.put("mail.smtp.host", data.getSmtp());
        // 设置发送邮件需要验证身份
        pro.put("mail.smtp.auth", "true");

        // 发送邮件的身份认证对象。
        Authenticator auth = new Authenticator()
        {
            @Override
            protected PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(data.getUserName(), data.getPassword());
            }
        };

        return Session.getDefaultInstance(pro, auth);
    }
}