JAVA代码发送邮件示例和解释
2024-10-19 03:35:37
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:
- package test;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Properties;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import javax.mail.Address;
- import javax.mail.Authenticator;
- import javax.mail.BodyPart;
- import javax.mail.Message;
- import javax.mail.PasswordAuthentication;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeBodyPart;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMultipart;
- import com.sun.mail.util.MailSSLSocketFactory;
- ///**
- // *
- // * @author zengyuan
- // * @date Jan 15, 2016 - 9:55:48 AM
- // * @Description 邮件发送测试类
- // */
- public class sendMailTest {
- public static void main(String[] args) throws Exception {
- // 配置信息
- Properties pro = new Properties();
- pro.put("mail.smtp.host", "smtp.163.com");
- pro.put("mail.smtp.auth", "true");
- // SSL加密
- MailSSLSocketFactory sf = null;
- sf = new MailSSLSocketFactory();
- // 设置信任所有的主机
- sf.setTrustAllHosts(true);
- pro.put("mail.smtp.ssl.enable", "true");
- pro.put("mail.smtp.ssl.socketFactory", sf);
- // 根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了
- //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码
- MailAuthenticator authenticator = new MailAuthenticator("tuzongxun123",
- "客户端授权码");
- Session session = Session.getInstance(pro, authenticator);
- // 根据Session 构建邮件信息
- Message message = new MimeMessage(session);
- // 创建邮件发送者地址
- Address from = new InternetAddress("tuzongxun123@163.com");
- // 设置邮件消息的发送者
- message.setFrom(from);
- // 验证收件人邮箱地址
- List<String> toAddressList = new ArrayList<>();
- toAddressList.add("1160569243@qq.com");
- StringBuffer buffer = new StringBuffer();
- if (!toAddressList.isEmpty()) {
- String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
- Pattern p = Pattern.compile(regEx);
- for (int i = 0; i < toAddressList.size(); i++) {
- Matcher match = p.matcher(toAddressList.get(i));
- if (match.matches()) {
- buffer.append(toAddressList.get(i));
- if (i < toAddressList.size() - 1) {
- buffer.append(",");
- }
- }
- }
- }
- String toAddress = buffer.toString();
- if (!toAddress.isEmpty()) {
- // 创建邮件的接收者地址
- Address[] to = InternetAddress.parse(toAddress);
- // 设置邮件接收人地址
- message.setRecipients(Message.RecipientType.TO, to);
- // 邮件主题
- // message.setSubject("java邮件测试");
- message.setSubject("为什么错了");
- // 邮件容器
- MimeMultipart mimeMultiPart = new MimeMultipart();
- // 设置HTML
- BodyPart bodyPart = new MimeBodyPart();
- // 邮件内容
- // String htmlText = "java邮件测试111";
- String htmlText = "为什么错了";
- bodyPart.setContent(htmlText, "text/html;charset=utf-8");
- mimeMultiPart.addBodyPart(bodyPart);
- // 添加附件
- List<String> fileAddressList = new ArrayList<String>();
- fileAddressList
- .add("C:\\Users\\tuzongxun123\\Desktop\\新建 Microsoft Office Word 文档.docx");
- if (fileAddressList != null) {
- BodyPart attchPart = null;
- for (int i = 0; i < fileAddressList.size(); i++) {
- if (!fileAddressList.get(i).isEmpty()) {
- attchPart = new MimeBodyPart();
- // 附件数据源
- DataSource source = new FileDataSource(
- fileAddressList.get(i));
- // 将附件数据源添加到邮件体
- attchPart.setDataHandler(new DataHandler(source));
- // 设置附件名称为原文件名
- attchPart.setFileName(MimeUtility.encodeText(source
- .getName()));
- mimeMultiPart.addBodyPart(attchPart);
- }
- }
- }
- message.setContent(mimeMultiPart);
- message.setSentDate(new Date());
- // 保存邮件
- message.saveChanges();
- // 发送邮件
- Transport.send(message);
- }
- }
- }
- class MailAuthenticator extends Authenticator {
- /**
- * 用户名
- */
- private String username;
- /**
- * 密码
- */
- private String password;
- /**
- * 创建一个新的实例 MailAuthenticator.
- *
- * @param username
- * @param password
- */
- public MailAuthenticator(String username, String password) {
- this.username = username;
- this.password = password;
- }
- public String getPassword() {
- return password;
- }
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- public String getUsername() {
- return username;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
最新文章
- SEO优化---学会建立高转化率的网站关键词库
- php配置参数.md
- ios - block循环引用Demo示例
- 工具 cocoapods和插件
- Request 请求页面的地址路径获取
- python学习-day14-前端之html、css
- 使用 Google Analytics 跟踪 JavaScript 错误
- MySQL的Order By Rand()的效率问题
- 深入浅出设计模式——访问者模式(Visitor Pattern)
- IT男的”幸福”生活";续6
- 夺命雷公狗ThinkPHP项目之----企业网站22之网站前台中间层(解决代码冗余)
- windows上修改路由表
- Java-IO 输入输出流详解
- xcode 上 crash 调试的三种方法
- 使用pip install 或者easy_install安装Python的各种包出现cc failed with exit status 1
- IOS 修改图片的地理位置信息
- Java笔记--引用类型的使用
- 一、tars简单介绍 二、tars 安装部署资料准备
- Setup Post-mission Camera
- vs2015和Oracle在一起时的Shit问题
热门文章
- Jquery仿彩票更换数字动画效果
- 深入理解css系列:清除浮动
- 易图软件之EaseMap Desktop 1.0发布
- Windows And Video Memory
- declaration is incompatible with ";__nounwind __interwork __softfp unsigned long __get_PSP(void)"; IAR 编译报故障
- Installshield调用DLL的正确姿势
- 临时解决系统中大量的TIME_WAIT连接
- UML和UP简介(转载)
- LintCode StrStr
- HTML 列表详解