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);
}
}
上一篇: spring mail 发送邮件
下一篇: Java mail 发送邮件