Java中发送邮件

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

1. 电子邮件协议

电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

2. JavaMail

我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载,这里我从 JavaEE 官方的 Github 仓库下载。

JavaMail 下载地址:https://github.com/javaee/javamail/releases

特别注意:

本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用JavaMail 1.6.0版本再进行尝试。

使用JavaMail 1.6.0要求的 JDK 版本必须是JDK 1.7 以上(建议使用最新版 JDK)。

不要直接就完完全全复制我的代码,需要修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送,内容一致,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

package com.companyserver.service.impl;

@Service

public class EmailServiceImpl implements EmailService {

@Value("${mail.username}")

private StringMAIL_USERNAME;

@Value("${mail.from}")

private StringMAIL_FROM;

@Value("${mail.password}")

private StringMAIL_PASSWORD;

@Value("${mail.host}")

private StringMAIL_HOST;

@Value("${mail.port}")

private StringMAIL_PORT;

//设置配置条件

private Properties generateProperties() {

     Properties properties = System.getProperties();//系统配置

      properties.put("mail.smtp.host",MAIL_HOST);//邮件服务器

       properties.put("mail.smtp.port",MAIL_PORT);//邮件服务器端口

       properties.put("mail.smtp.auth","true");

        properties.put("mail.transport.protocol","smtp");//发送方式

         return properties;

   }

private Session getSession() {

Properties props =this.generateProperties();

Session session = Session.getInstance(props, new javax.mail.Authenticator() {

      protected PasswordAuthentication getPasswordAuthentication() {

              return new PasswordAuthentication(MAIL_USERNAME, MAIL_PASSWORD);

          }

     });

     return session;

   }

//发送网页消息

@Override

public voidsendHtml(String to,String subject,String body)throwsMessagingException {

Session session = getSession();

Message message =newMimeMessage(session);

message.setFrom(newInternetAddress(MAIL_FROM));

message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

message.setSentDate(newDate());//设置邮件消息发送的时间

message.setSubject(subject);//设置邮件发送的端口

//发送简单的文本消息可以这样

//message.setText(body);

//Transport.send(message);

//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart =newMimeMultipart();

MimeBodyPart messageBodyPart =newMimeBodyPart();//创建一个包含附件内容的MimeBodyPart

//设置HTML内容

messageBodyPart.setContent(body,"text/html; charset=utf-8");

mainPart.addBodyPart(messageBodyPart);

message.setContent(mainPart);

Transport.send(message);

    }

@Override

public voidsendMessage(String to,String subject,String body)throwsMessagingException{

Session session = getSession();

Message message =newMimeMessage(session);

message.setFrom(newInternetAddress(MAIL_FROM));

message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

message.setSentDate(newDate());//设置邮件消息发送的时间

message.setSubject(subject);

message.setText(body);

Transport.send(message);

     }

}

作者:谁在烽烟彼岸

链接:https://www.jianshu.com/p/79e7e1fb6712

來源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Java中发送邮件)