java mail 发送邮件

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

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);
    }
}

 

你可能感兴趣的:(java mail)