这是一个小的发送emai的案例,供大家参考,具体内容如下
代码里面放了很多注解,这里多说无益。
发送邮件实体类:
package com.yqx.emaildemo.demo;
import lombok.Data;
import org.apache.commons.mail.EmailAttachment;
import java.util.List;
/**
* 发送邮件实体类
*
* @author YangChingyu-k
* @date 2019/10/10 14:59
*/
@Data
public class MailInfo {
/**
* 收件人
*/
private List toAddress = null;
/**
* 抄送人地址
*/
private List ccAddress = null;
/**
* 密送人
*/
private List bccAddress = null;
/**
* 附件信息
*/
private List emailAttachments = null;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件文本内容
*/
private String content;
public void addToAddress(String toAddress) {
this.toAddress.add(toAddress);
}
public void addToAddress(List toAddress) {
this.toAddress.addAll(toAddress);
}
public void addCcAddress (List ccAddress) {
if (!ccAddress.isEmpty()) {
this.ccAddress.addAll(ccAddress);
}
}
}
工具类:
package com.yqx.emaildemo.demo;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.HtmlEmail;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 发送邮件辅助工具类
*
* @author YangChingyu-k
* @date 2019/10/10 15:12
*/
public class MailUtil {
/**
* 邮箱
*/
private static String mailServerHost = "smtp.qq.com";
private static String mailSenderAddress = "xxx@qq.com";
private static String mailSenderNick = "YangChingyu-k";
private static String mailSenderUserName = "xxx@qq.com";
// 这里的密码是开启服务之后的授权码
private static String mailSenderPassWord = "xxx";
/**
* 发送邮件(Html格式,支持附件)
*
* @param mailInfo
*/
public static void sendMail(MailInfo mailInfo) {
try {
// 利用jar包中提供的HtmlEmail类
HtmlEmail email = new HtmlEmail();
// 配置信息
// 这里用的是QQ邮箱的地址,不同的邮箱采用的地址不同,官方有说明
email.setHostName(mailServerHost);
// 发送的地址,发送者昵称
email.setFrom(mailSenderAddress, mailSenderNick);
// 用户名,密码(这里的密码不是登录密码,而是开启POP3/SMTP服务之后获取的授权密码)
email.setAuthentication(mailSenderUserName, mailSenderPassWord);
// 编码
email.setCharset("UTF-8");
// 主题
email.setSubject(mailInfo.getSubject());
// 内容
email.setHtmlMsg(mailInfo.getContent());
// 添加附件
List emailAttachments = mailInfo.getEmailAttachments();
if (!emailAttachments.isEmpty()) {
for (int i=0; i
email.attach(emailAttachments.get(i));
}
}
// 收件人
List toAddress = mailInfo.getToAddress();
if (!toAddress.isEmpty()) {
for (int i=0; i
email.addTo(toAddress.get(i));
}
}
// 抄送人
List ccAddress = mailInfo.getCcAddress();
if (!ccAddress.isEmpty()) {
for (int i=0; i
email.addCc(ccAddress.get(i));
}
}
// 密送人
List bccAddress = mailInfo.getBccAddress();
if (!bccAddress.isEmpty()) {
for (int i=0; i
email.addBcc(bccAddress.get(i));
}
}
// 如果官方邮件关闭了,可以使用SSL的方式发送
// 使用QQ邮箱是暂时不需要的
// email.setSSLOnConnect(true);
// 发送
email.send();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("发送时间:" + sdf.format(new Date()));
System.out.println("发送人:" + mailSenderNick);
if (!toAddress.isEmpty()) {
for (int i=0;i
System.out.println("接收人:" + toAddress.get(i));
}
}
System.out.println("邮件发送成功...");
System.out.println("端口:" + email.getSmtpPort());
} catch (Exception e) {
System.out.println("邮件发送失败, error: " + e.getMessage());
e.printStackTrace();
}
}
}
测试main方法:
package com.yqx.emaildemo.demo;
import org.apache.commons.mail.EmailAttachment;
import java.util.ArrayList;
import java.util.List;
/**
* 测试:发送邮件 (先new出邮件实体类,赋值之后,再利用工具类方法进行发送操作)
*
* 注重点:
* 1) 邮箱需要开启POP3/SMTP服务
* 2) 使用的邮箱密码不是登录时的密码,而是开启以上服务之后的授权码
* 3) 邮箱地址必须是正确存在的,否则将会被退信处理
*
*
* @author YangChingyu-k
* @date 2019/10/10 15:53
*/
public class MainTest {
public static void main(String[] args) {
MailInfo mailInfo = new MailInfo();
// 收件人
List toList = new ArrayList<>();
toList.add("xxx.com");
// 抄送人
List ccList = new ArrayList<>();
ccList.add("xxx@qq.com");
// 密送人
List bccList = new ArrayList<>();
bccList.add("xxx@qq.com");
// 添加附件
EmailAttachment emailAttachment = new EmailAttachment();
// 文件全路径
emailAttachment.setPath("C:/Users/YangChingyu-k/Desktop/lemon.txt");
// 附件:文件全名 (文件名 + .格式)
emailAttachment.setName("这是一个测试的附件.txt");
// 多个附件
List emailAttachments = new ArrayList<>();
emailAttachments.add(emailAttachment);
mailInfo.setEmailAttachments(emailAttachments);
// 收件人
mailInfo.setToAddress(toList);
// 抄送人
mailInfo.setCcAddress(ccList);
// 密送人
mailInfo.setBccAddress(bccList);
// 主题
mailInfo.setSubject("This is a object");
// 内容
mailInfo.setContent("
这是一段测试的内容~
");// 调用工具类方法进行发送
MailUtil.sendMail(mailInfo);
}
}
我觉得注释应该写得很清楚了吧,这是作为一个demo来写的,分享一下,在写的时候一直遇到找不到地址之类的,或者服务没开之类的报错,这里都写了注重点的东西,这是第一次在代码里面一直写很多注释。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。