轉載自:https://blog.csdn.net/wang_97/article/details/79851437
第一步:開啟SMTP/POP3協定,擷取授權碼

開啟協定後會得到一個授權碼,需記錄下來,後面要用到。
第二步:下載下傳eclipce最新版本,因為需要用到gradle工具,eclipce最新版本可直接使用
下載下傳完後,建立gradle項目,以下是我實作完後的整體項目
其中會涉及到gradle包的下載下傳,使用以下的代碼需要用到mail.jar,spring-context-support.jar兩個包
若不知怎麼在gradle中導包,可參考我的其他部落格,有一篇專門介紹gradle導包
接下來的是各個檔案的代碼内容,可直接複制
其中實作了發送郵件的三種方法
第三步、
@Configuration
@ComponentScan("spittr")
@PropertySource("classpath:mail.properties")
public class MailConfig {
@Bean
public JavaMailSenderImpl mailSender(Environment env) {
//spring自帶了一個MailSender的實作接口
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
//郵件伺服器主機名
mailSender.setHost(env.getProperty("mailserver.host"));
//郵件伺服器監聽的端口号
mailSender.setPort(Integer.parseInt(env.getProperty("mailserver.port")));
//使用者名稱
mailSender.setUsername(env.getProperty("mailserver.username"));
//密碼,這裡不是郵箱的密碼,而是開啟伺服器後,生成的授權碼
mailSender.setPassword(env.getProperty("mailserver.password"));
//ssl加密,需要加,否則無法運作
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Properties props = System.getProperties();
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
mailSender.setJavaMailProperties(props );
return mailSender;
}
}
第四步、
public class Spitter {
//編号
private Long id;
//使用者名稱
private String username;
//使用者密碼
private String password;
//發件人的名稱
private String fullName;
//收件人的郵箱
private String email;
//判斷郵件是否帶有附件
private boolean updateByEmail;
public Spitter(Long id, String username, String password, String fullName, String email, boolean updateByEmail) {
this.id = id;
this.username = username;
this.password = password;
this.fullName = fullName;
this.email = email;
this.updateByEmail = updateByEmail;
}
public Long getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getFullName() {
return fullName;
}
public String getEmail() {
return email;
}
public boolean isUpdateByEmail() {
return updateByEmail;
}
}
第五步、
public class Spittle {
//編号
private final Long id;
//郵件的内容
private final String text;
//發送的時間
private final Date postedTime;
//郵件資訊的對象
private Spitter spitter;
public Spittle(Long id, Spitter spitter, String text, Date postedTime) {
this.id = id;
this.spitter = spitter;
this.text = text;
this.postedTime = postedTime;
}
public Long getId() {
return this.id;
}
public String getText() {
return this.text;
}
public Date getPostedTime() {
return this.postedTime;
}
public Spitter getSpitter() {
return spitter;
}
}
第六步、
public interface SpitterMailService {
public abstract void sendSimpleSpittleEmail(String to, Spittle spittle);
public abstract void sendSpittleEmailWithAttachment(String to, Spittle spittle) throws MessagingException;
public abstract void sendRichSpitterEmail(String to,Spittle spittle)throws MessagingException;
}
第七步、
@Component
public class SpitterMailServiceImpl implements SpitterMailService {
//郵件發送的核心類
private JavaMailSender mailSender;
private VelocityEngine velocityEngine;
//通過構造方法将JavaMailSender依賴注入進來
@Autowired
public SpitterMailServiceImpl(JavaMailSender mailSender,VelocityEngine velocityEngine) {
this.mailSender = mailSender;
this.velocityEngine = velocityEngine;
}
@Override
public void sendSimpleSpittleEmail(String to, Spittle spittle) {
//通過這個對象封裝資訊,相當于信封
SimpleMailMessage message = new SimpleMailMessage();
//擷取spittle對象中的收件人名字
String spitterName = spittle.getSpitter().getFullName();
//發件人
message.setFrom("******@qq.com");
//收件人
message.setTo(to);
//郵件主題
message.setSubject("New spittle from " + spitterName);
//郵件内容
message.setText(spitterName + " says: " + spittle.getText());
//發送郵件
mailSender.send(message);
}
@Override
public void sendSpittleEmailWithAttachment(String to, Spittle spittle) throws MessagingException {
//通過郵件發送器的createMimeMessage方法建構可含附件的郵件
MimeMessage message = mailSender.createMimeMessage();
// 第一個參數是郵件的對象
// 第二個參數為true表示這個消息是multipart類型的消息(表示是帶有附件的郵件)
// 第三個參數是防止中文亂碼
MimeMessageHelper helper = new MimeMessageHelper(message,true,"utf-8");
//擷取收件人名,用于後面發送郵件做主題
String spitterName = spittle.getSpitter().getFullName();
//寄件人
helper.setFrom("*******@qq.com");
//收件人
helper.setTo(to);
//郵件的主題内容
helper.setSubject("New spittle from " + spitterName);
//郵件的發送内容
helper.setText(spitterName + " says: " + spittle.getText());
//通過路徑擷取圖檔附件
ClassPathResource couponImage = new ClassPathResource("/collateral/coupon.jpg");
//第一個參數是圖檔的名稱,到時候收件人收到的附件名
//第二個參數是圖檔附件的資源
helper.addAttachment("Coupon.jpg", couponImage);
//send方法是發送郵件的方法
mailSender.send(message);
}
@Override
public void sendRichSpitterEmail(String to,Spittle spittle)throws MessagingException {
//建立一封富文本郵件
MimeMessage message=mailSender.createMimeMessage();
//第二個參數表明傳遞進來的第一個參數是html文本
MimeMessageHelper helper=new MimeMessageHelper(message,true,"utf-8");
//發件人
helper.setFrom("********@qq.com");
//收件人
helper.setTo(to);
//發送的郵件主題
helper.setSubject("New spittle from " + spittle.getSpitter().getFullName());
//cid:spitterLogo,标記一個變量,後面為這個變量添加一張圖檔
//第二個參數表示傳遞的第一個參數是html
helper.setText("<html><body><img src='cid:spittleLogo'>"+"<h4>"+
spittle.getSpitter().getFullName()+"says...</h4>"+"<i>"+spittle.getText()+
"</i>"+"</body></html>",true);
//建立一個變量存放圖檔
ClassPathResource image=new ClassPathResource("/collateral/coupon.jpg");
//為消息添加嵌入式的圖檔
helper.addInline("spittleLogo", image);
//發送郵件
mailSender.send(message);
}
}
第八步、圖檔自行添加
第九步、這是最終的測試運作類,做到這裡先别急,還沒完
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MailConfig.class)
public class SpitterMailServiceImplTest {
@Autowired
private SpitterMailService mailService;
@Test
public void sendSimpleSpittleEmail() throws Exception {
Spitter spitter = new Spitter(1L, "habuma", null, "coffie", "******@qq.com", true);
Spittle spittle = new Spittle(1L, spitter, "Hiya!", new Date());
//第一個參數是收件人,第二個參數是郵件
mailService.sendSimpleSpittleEmail(spitter.getEmail(),spittle);
mailService.sendSpittleEmailWithAttachment(spitter.getEmail(), spittle);
mailService.sendRichSpitterEmail(spitter.getEmail(),spittle);
}
}
第十步、這個檔案是配置郵箱伺服器的屬性,要是覺得麻煩也可以直接寫在第三步中相對應的值中,但是卻沒那麼靈活
qq的伺服器名
mailserver.host=smtp.qq.com
端口号
mailserver.port=465
你的郵箱号
mailserver.username=********@qq.com
第一步擷取到的授權碼
mailserver.password=adomojibzlirbdff
---------------------
作者:wang_97
來源:CSDN
原文:https://blog.csdn.net/wang_97/article/details/79851437
版權聲明:本文為部落客原創文章,轉載請附上博文連結!