相信很多人都用過(guò)網(wǎng)絡(luò)郵箱,如QQ郵箱、新浪郵箱或者163郵箱等等。接下來(lái)我將為大家用剖析一下關(guān)于Java怎么實(shí)現(xiàn)在網(wǎng)絡(luò)論壇發(fā)送郵件的具體過(guò)程,下面有具體案例說(shuō)明。
1、郵箱設(shè)置
首先需要注冊(cè)一個(gè)新浪郵箱 18215626061@sina.cn
然后進(jìn)入設(shè)置開(kāi)啟POP3/SMTP服務(wù),務(wù)必記住授權(quán)碼
左下角點(diǎn)開(kāi)啟
2、Spring Email
導(dǎo)入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.4.4</version>
</dependency>
然后在IDEA中的application中配置郵箱的相關(guān)設(shè)置
可以創(chuàng)建.properties也可以創(chuàng)建.yaml。分別如下:
此處password為授權(quán)碼 有的郵箱的密碼需要隱匿的設(shè)置為授權(quán)碼,否則會(huì)錯(cuò)誤,這里不用授權(quán)碼的話可以換回密碼。
這里我們創(chuàng)建一個(gè)util包,然后創(chuàng)建MailClient類(lèi),這里因?yàn)榘l(fā)郵件的時(shí)候是要委托新浪郵箱,所以這里是一個(gè)Client類(lèi)。來(lái)進(jìn)行委托的業(yè)務(wù)處理。
此處用到的最關(guān)鍵的核心組件是:
JavaMailSender
JavaMailSender
JavaMailSender
我自己記不住,所以多些幾遍加深記憶。 Java實(shí)現(xiàn)發(fā)送email用到的是與郵件發(fā)送相關(guān)的類(lèi),那么就是MailSender類(lèi)。
發(fā)送郵件涉及的關(guān)鍵字:發(fā)送人,發(fā)送到哪里(To),郵件主題,還有郵件內(nèi)容。分別用(from,to,subject,context)表示。
JavaMailSender的源碼如下
可以看到第一步是有一個(gè)MimeMessage所以看如下代碼
@Component
public class MailClient {
private staticfinal Logger logger= LoggerFactory.getLogger(MailClient.class);
@Autowired
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
public voidsendMail(String to,String subject,String context){
try {
MimeMessage message= javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(context,true);//不加true表示是默認(rèn)文本,加了true表示支持html文本
javaMailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("發(fā)送郵件失敗"+e.getMessage());
}
}
}
測(cè)試類(lèi)
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {
@Autowired
private MailClient mainClient;
@Test
public void testTextMail(){
mainClient.sendMail("596844484@qq.com","java yyds", "Welcome");
}
}
然后果不其然出現(xiàn)了錯(cuò)誤
然后果不其然出現(xiàn)了錯(cuò)誤
然后果不其然出現(xiàn)了錯(cuò)誤
產(chǎn)生這個(gè)錯(cuò)誤的原因去查了查是因?yàn)槭跈?quán)碼的問(wèn)題,解決這個(gè)問(wèn)題可以閱讀文章末尾補(bǔ)充文章
然后經(jīng)過(guò)種種我把新浪微博換成了網(wǎng)易163的郵箱
并按照解決辦法去修改。測(cè)試成功
3、使用Thymeleaf模板發(fā)送html文本
先寫(xiě)一個(gè)html文件
附上代碼
@Autowired
private TemplateEngine templateEngine;
@Test
//注意這里的Context 是Thymeleaf下的
public void testTextMailHtml(){
Context context=new Context();
context.setVariable("username", "小傻瓜"); //從這里取值
String process = templateEngine.process("/mail/demo", context);
System.out.println(process);
mailClient.sendMail("18215626061@sina.com","java yyds", "Welcome");
}
下面讓我們想一想開(kāi)始發(fā)郵箱時(shí)的為什么會(huì)報(bào)錯(cuò)。
報(bào)錯(cuò)信息如下圖:
查了查資料,才發(fā)現(xiàn),如果是163郵箱發(fā)送郵件,password配置的需要是163的授權(quán)碼。如下圖:
這樣就解決了報(bào)錯(cuò)問(wèn)題。
以上就是使用 Java 實(shí)現(xiàn)在網(wǎng)絡(luò)論壇上發(fā)送郵件全過(guò)程的全部?jī)?nèi)容,想要了解更多關(guān)于 Java 應(yīng)用的其他資料請(qǐng)關(guān)注W3Cschool其它相關(guān)文章!,希望大家以后多多支持我們!