1. 什么是JavaMail
JavaMail是提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP,开发人员使用JavaMail编写邮件程序时,无需考虑底层的通信细节(Socket),JavaMail也提供了能够创建出各种复杂MIME格式的邮件内容的API。使用JavaMail,我们可以实现类似OutLook、FoxMail的软件。
2. 邮件开发的相关协议
Ø SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议(25号端口)。
Ø POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110)。
Ø IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一
3. IMAP和POP3有什么区别?
4. POP3/IMAP、SMTP之间的区别和联系
简单地说,SMTP管“发”,POP3/IMAP管“收”。
举个例子,你坐在电脑边用mail client写完邮件,点击‘发送’。这时你的mail client会发消息给邮件服务器上的SMTP service。这时有两种情况:
1. 如果邮件的收信人也是处于同一个domain,比如从给163的邮箱,SMTP service只需要转给local的POP3 Service即可
2. 如果邮件收信人是另外的domain,比如
5. 邮件发送的过程
6.API
7.简单邮件发送
7.1pom依赖
javax.mail
1.4.4
7.2发送简单邮件
import org.junit.Test;
import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class TestSendSimpleEmail {
@Test
public void test() throws Exception {
//设置发送者的配置信息 Properties properties = new Properties();
//发送者的协议 properties.put("mail.smtp.host","smtp.163.com");
properties.put("mail.smtp.auth","true");
Session session = Session.getInstance(properties);
//设置调试信息在控制台打印出来 session.setDebug(true);
//信息体 MimeMessage message = new MimeMessage(session);
//发信者 Address address = new InternetAddress("17630039316@163.com");
message.setFrom(address);
//收信者 Address toAddress = new InternetAddress("814962461@qq.com");
/*** 设置收件人地址(可以增加多个收件人、抄送、密送)* MimeMessage.RecipientType.TO:发送* MimeMessage.RecipientType.CC:抄送* MimeMessage.RecipientType.BCC:密送*/
message.setRecipient(MimeMessage.RecipientType.TO,toAddress);
//主题 message.setSubject("米西米西");
//正文 message.setText("哈喽啊,饭已ok啦,下来米西吧!!!");
message.saveChanges();
//发送邮件 Transport transport = session.getTransport("smtp");
//登录 transport.connect("17630039316@163.com", "QQ19971015");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
7.3spring整合发送简单邮件
7.3.1applicationContext-mail.xml
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsd">
${mail.from}
true
true
0
mail.host=smtp.163.com
mail.username=你的邮箱账户
mail.password=你的邮箱密码
mail.from=你的邮箱
7.3.3测试
package com.email;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-mail.xml")
public class TestSpringSendSimpleEmail {
@Autowired
private MailSender mailSender;
@Autowired
private SimpleMailMessage simpleMailMessage;
@Test
public void SingleMailSend () {
simpleMailMessage.setSubject("通知");
simpleMailMessage.setText("这是一个验证码8857");
simpleMailMessage.setTo("1518913949@qq.com");
mailSender.send(simpleMailMessage);
}
}
7.4发送带有图片的邮件
@Test
public void ImageMailSend () throws MessagingException {
JavaMailSenderImpl sender = (JavaMailSenderImpl)mailSender;
MimeMessage mailMessage = sender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
messageHelper.setFrom("17630039316@163.com");
messageHelper.setTo("1640281429@qq.com");
messageHelper.setSubject("测试邮件中嵌套图片!!");
// true 表示启动HTML格式的邮件 messageHelper.setText(
"
hello!!spring image html mail
"+"", true);
FileSystemResource img = new FileSystemResource(new File("d://1.png"));
messageHelper.addInline("image", img);//跟cid一致 sender.send(mailMessage);
System.out.println("邮件发送成功...");
}
7.5发送带附件的邮件
@Test
public void AttachedMailSend() throws MessagingException {
JavaMailSenderImpl sender = (JavaMailSenderImpl)mailSender;
MimeMessage mailMessage = sender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
messageHelper.setFrom("17630039316@163.com");
messageHelper.setTo("1640281429@qq.com");
messageHelper.setSubject("测试邮件中嵌套附件!!");
// true 表示启动HTML格式的邮件 messageHelper.setText(
"
工资已发放,详细信息请查看附件
", true);FileSystemResource file = new FileSystemResource(new File("D://1.xlsx"));
messageHelper.addAttachment("工资.xlsx", file);//添加到附件
sender.send(mailMessage);
System.out.println("邮件发送成功...");
}