由于项目中需要用到发送邮件的功能
项目前后使用了两种实现方式,
一是java mail直接连接邮箱服务器,代码如下
import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;import org.springframework.beans.factory.annotation.Value;/*** @ClassName: MailSender* @Description: TODO(发送邮件)* */
public class MailSender {@Value("${emailAccount}")private static String emailAccount;@Value("${emailPassword}")private static String emailPassword;@Value("${emailAddress}")private static String emailAddress;@Value("${emailSMTPHost}")private static String emailSMTPHost;public static void sendMail(MailUser receiver) throws Exception{// 1. 创建参数配置, 用于连接邮件服务器的参数配置Properties props = new Properties(); // 参数配置props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", CbmsConfigHelper.getProperty("emailSMTPHost")); // 发件人的邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.auth", "true"); // 需要请求认证// 2. 根据配置创建会话对象, 用于和邮件服务器交互Session session = Session.getInstance(props);session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log// 3. 创建一封邮件MimeMessage message = createMimeMessage(session, receiver);// 4. 根据 Session 获取邮件传输对象Transport transport = session.getTransport();// 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错transport.connect(CbmsConfigHelper.getProperty("emailAccount"), CbmsConfigHelper.getProperty("emailPassword"));// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人transport.sendMessage(message, message.getAllRecipients());// 7. 关闭连接transport.close();}/*** 创建一封只包含文本的简单邮件** @param session 和服务器交互的会话* @param sendMail 发件人邮箱* @param receiveMail 收件人邮箱* @return* @throws Exception*/public static MimeMessage createMimeMessage(Session session, MailUser receiver) throws Exception {// 1. 创建一封邮件MimeMessage message = new MimeMessage(session);// 2. From: 发件人message.setFrom(new InternetAddress(CbmsConfigHelper.getProperty("emailAddress"), "开发者社区","UTF-8"));// 3. To: 收件人(可以增加多个收件人、抄送、密送)message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiver.getEmailAccount(), "UTF-8"));// 4. Subject: 邮件主题message.setSubject(receiver.getSubject(), "UTF-8");// 5. Content: 邮件正文(可以使用html标签)message.setContent(receiver.getContent(), "text/html;charset=UTF-8");// 6. 设置发件时间message.setSentDate(new Date());// 7. 保存设置message.saveChanges();return message;}}
二是调用外部接口,这里暂不赘述,后续更新