上周公司的项目要求开发邮件发送功能。本身在网上跟着教程边学边作了一下午,如今基本开发完成了。因为一个同事也想看下该怎么写,顺便学习下。因此我就写成了一遍教程,顺便巩固下邮件发送里面的内容。html
第一步,咱们先写个Demo,用最快的方式最少的代码向你展现Java Mail 是如何工做的。
个人开发环境是:java
构建一个简单的邮件发送,一共须要四步:服务器
//发件人邮箱 String sendEmailAccount = "Example@outlook.com"; //发件人密码 String sendEmailPassword = "password"; // 发件人邮箱的 SMTP 服务器地址, 此处为Outlook邮箱的SMTP服务器 String sendEmailSMTPHost = "smtp-mail.outlook.com"; // 收件人邮箱 String receiveMailAccount = "Example@163.com"; //默认端口号设置为587,也能够设置为465,具体取决于SMTP服务器要求的端口号 final String smtpPort = "587"; // 使用Java配置类进行配置 Properties props = new Properties(); // 使用的协议(JavaMail规范要求) props.setProperty("mail.transport.protocol", "smtp"); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 须要请求认证 props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.port", smtpPort); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.socketFactory.port", smtpPort );
Session session = Session.getDefaultInstance(props); // debug模式下会在控制台打印出日志,若是不想看日志应该设置为false session.setDebug(true);
// 1. 建立一封邮件 MimeMessage message = new MimeMessage(session); // 2. From: 发件人 message.setFrom(new InternetAddress(sendEmailAccount , "ExampleFrom", "UTF-8")); // 3. To: 收件人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "ExampleUser", "UTF-8")); // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以致返回失败,请修改标题) message.setSubject("test", "UTF-8"); // 5. Content: 邮件正文 message.setContent("<h3>This is a test email.</h3>", "text/html;charset=UTF-8"); // 6. 设置邮件发件时间 message.setSentDate(new Date()); // 7. 保存设置 message.saveChanges();
// 1. 根据 Session 获取邮件传输对象 Transport transport = session.getTransport(); // 2. 使用 邮箱帐号 和 密码 链接邮件服务器 transport.connect(myEmailAccount, myEmailPassword); // 3. 发送邮件, 发到全部的收件地址, message.getAllRecipients() 获取到的是在建立邮件对象时添加的全部收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); // 4. 关闭链接 transport.close();
整合以上步骤的完整代码以下:session
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; public class MailExample { public static void main(String[] args) throws Exception { /** * 1.配置发件人邮箱信息以及建立一个Java 配置类存放SMTP服务器地址等参数。 */ // 发件人邮箱 String sendEmailAccount = "Example@outlook.com"; // 发件人密码 String sendEmailPassword = "password"; // 发件人邮箱的 SMTP 服务器地址, 此处为Outlook邮箱的SMTP服务器 String sendEmailSMTPHost = "smtp-mail.outlook.com"; // 收件人邮箱 String receiveMailAccount = "Example@163.com"; // 使用Java配置类进行配置 Properties props = new Properties(); // 使用的协议(JavaMail规范要求) props.setProperty("mail.transport.protocol", "smtp"); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 须要请求认证 props.setProperty("mail.smtp.auth", "true"); // 默认端口号设置为587,也能够设置为465,具体取决于SMTP服务器要求的端口号 final String smtpPort = "465"; props.setProperty("mail.smtp.port",smtpPort ); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.socketFactory.port", smtpPort ); /** * 2.建立一个同邮件服务器交互的session */ Session session = Session.getDefaultInstance(props); session.setDebug(true); // 1. 建立一封邮件 MimeMessage message = new MimeMessage(session); // 2. From: 发件人 message.setFrom(new InternetAddress(sendEmailAccount, "ExampleFrom", "UTF-8")); // 3. To: 收件人 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "ExampleUser", "UTF-8")); // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以致返回失败,请修改标题) message.setSubject("test", "UTF-8"); // 5. Content: 邮件正文 message.setContent("<h3>This is a test email.</h3>", "text/html;charset=UTF-8"); // 6. 设置邮件发件时间 message.setSentDate(new Date()); // 7. 保存设置 message.saveChanges(); /** * 3.建立一封格式化的邮件 */ // 1. 根据 Session 获取邮件传输对象 Transport transport = session.getTransport(); // 2. 使用 邮箱帐号 和 密码 链接邮件服务器 transport.connect(sendEmailAccount, sendEmailPassword); // 3. 发送邮件, 发到全部的收件地址, message.getAllRecipients() 获取到的是在建立邮件对象时添加的全部收件人, 抄送人, transport.sendMessage(message, message.getAllRecipients()); // 4. 关闭链接 transport.close(); } }
这样一个简单的JavaMail的Demo就完成了。快去测试下吧。socket