天學習了如何用Java[1] 發(fā)送普通郵件,HTML郵件和帶附件的郵件。黑客最喜歡干的事情就是發(fā)釣魚郵件,安全磚家還為其美名叫魚叉攻擊,嘖嘖。
ailx10:網(wǎng)絡(luò)安全優(yōu)秀回答者,網(wǎng)絡(luò)安全碩士
發(fā)送一封簡單的QQ郵件:
package hackbiji;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class hello {
public static void main(String[] args) {
String to = "792161993@qq.com";
String from = "393803933@qq.com";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host",host);
properties.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("393803933","***********");
}
});
try {
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(from));
mimeMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
mimeMessage.setSubject("主題:黑客筆記");
mimeMessage.setText("正文:我是ailx10,我喜歡2進制安全和滲透技術(shù)");
Transport.send(mimeMessage);
System.out.println("發(fā)送郵件成功");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
發(fā)送一封HTML QQ郵件:
package hackbiji;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class hello {
public static void main(String[] args) {
String to = "792161993@qq.com";
String from = "393803933@qq.com";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host",host);
properties.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("393803933@qq.com","************");
}
});
try {
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(from));
mimeMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
mimeMessage.setSubject("主題:黑客筆記");
mimeMessage.setContent("<img src=\"http://hackbiji.top/images/avatar.jpg\" width=\"50\" height=\"50\" />","text/html");
Transport.send(mimeMessage);
System.out.println("發(fā)送郵件成功");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
發(fā)送一封帶附件的QQ郵件
package hackbiji;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class hello {
public static void main(String[] args) {
String to = "792161993@qq.com";
String from = "393803933@qq.com";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host",host);
properties.put("mail.smtp.auth","true");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("393803933@qq.com","***********");
}
});
try {
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(from));
mimeMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
mimeMessage.setSubject("主題:黑客筆記");
MimeBodyPart msgBodyPart = new MimeBodyPart();
msgBodyPart.setText("正文:我是ailx10");
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(msgBodyPart);
msgBodyPart = new MimeBodyPart();
String filepath = "C:\\Users\\Admin\\IdeaProjects\\helloworld\\src\\src\\main\\java\\hackbiji\\hack.zip";
String filename = "hack.zip";
FileDataSource fileDataSource = new FileDataSource(filepath);
msgBodyPart.setDataHandler(new DataHandler(fileDataSource));
msgBodyPart.setFileName(filename);
mimeMultipart.addBodyPart(msgBodyPart);
mimeMessage.setContent(mimeMultipart);
Transport.send(mimeMessage);
System.out.println("發(fā)送郵件成功");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
言
歡迎再次回到我們的Python郵件發(fā)送系列文章!在上一篇文章中,我們成功搭建了使用Python發(fā)送郵件的基礎(chǔ)環(huán)境,并學會了如何連接到SMTP服務(wù)器。今天,我們將繼續(xù)深入,學習如何編寫一封完整的郵件內(nèi)容,并通過Python將其發(fā)送出去。
一、創(chuàng)建郵件內(nèi)容
在Python中,email模塊提供了豐富的類和方法,讓我們能夠輕松地構(gòu)建郵件內(nèi)容。對于簡單的文本郵件,我們可以使用email.mime.text.MIMEText類。
from email.mime.text import MIMEText
# 郵件正文內(nèi)容
message_text = "你好,這是一封來自Python的郵件!希望你喜歡Python編程的樂趣。"
# 創(chuàng)建郵件對象
# 注意:這里的'plain'表示純文本,'utf-8'是字符編碼
message = MIMEText(message_text, 'plain', 'utf-8')
# 設(shè)置郵件的頭部信息
# 發(fā)件人、收件人和郵件主題都是郵件頭部的重要部分
message['From'] = 'your_email@gmail.com' # 請?zhí)鎿Q成你的郵箱地址
message['To'] = 'receiver_email@example.com' # 請?zhí)鎿Q成接收者的郵箱地址
message['Subject'] = 'Hello from Python!' # 郵件主題
二、發(fā)送郵件
現(xiàn)在,我們已經(jīng)有了郵件內(nèi)容(包括正文和頭部信息),接下來就是通過SMTP服務(wù)器發(fā)送郵件了。我們將復用之前文章中創(chuàng)建的SMTP連接邏輯,來完成發(fā)送任務(wù)。
import smtplib
# SMTP服務(wù)器和端口(以Gmail為例)
smtp_server = 'smtp.gmail.com'
port = 587
# 你的Gmail賬號和密碼(或應(yīng)用專用密碼)
email = 'your_email@gmail.com' # 請?zhí)鎿Q成你的郵箱地址
password = 'your_app_specific_password' # 請?zhí)鎿Q成你的Gmail應(yīng)用專用密碼
try:
# 創(chuàng)建一個SMTP連接
server = smtplib.SMTP(smtp_server, port)
server.starttls() # 啟用TLS加密
server.login(email, password) # 登錄
# 發(fā)送郵件
# 注意:sendmail方法的第一個參數(shù)是發(fā)件人郵箱,第二個參數(shù)是接收者郵箱列表(即使只有一個接收者也要用列表形式),第三個參數(shù)是郵件內(nèi)容對象
server.sendmail(email, [message['To']], message.as_string())
print("郵件發(fā)送成功!")
finally:
# 關(guān)閉SMTP連接
server.quit()
注意:
結(jié)語
恭喜你,現(xiàn)在你已經(jīng)學會了如何使用Python編寫并發(fā)送一封簡單的文本郵件!在下一篇文章中,我們將進一步探索如何發(fā)送HTML郵件和帶附件的郵件,讓你的郵件內(nèi)容更加豐富多彩。請繼續(xù)關(guān)注我們的系列文章,不要錯過任何精彩內(nèi)容!
pringBoot整合了Java Mail可以很方便的發(fā)送電子郵件。
我們來看看如何發(fā)送HTML格式的電子郵件。
在SpringBoot的pom文件中導入電子郵件的starter。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在application.properties中配置郵箱信息,包括郵件服務(wù)器地址、用戶名和密碼。
spring.mail.host=smtp.qq.com
spring.mail.username=123@qq.com
spring.mail.password=456
使用@Autowired注解注入JavaMailSender對象。
@Autowired
private JavaMailSender javaMailSender;
創(chuàng)建mimeMessage對象發(fā)送HTML郵件。
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
try {
helper.setFrom("123@qq.com(帥鍋)");
helper.setTo("456@qq.com");
helper.setSubject("你好");
helper.setText("<a href='https://www.qq.com'>點我</a>",true);
} catch (MessagingException e) {
e.printStackTrace();
}
通過MimeMessageHelper對象設(shè)置郵件信息。
setText第一個參數(shù)是郵件的正文,在這里輸入HTML代碼
setText第二個參數(shù)是設(shè)置是否是HTML郵件,要設(shè)置為true
方法 | 作用 |
helper.setFrom | 設(shè)置發(fā)件人地址,可以通過“()”設(shè)置別名 |
helper.setTo | 設(shè)置收件人地址 |
helper.setSubject | 設(shè)置郵件標題 |
helper.setText | 設(shè)置郵件正文,第二個參數(shù)設(shè)置是否為HTML郵件 |
通過 javaMailSender.send方法發(fā)送電子郵件,參數(shù)是構(gòu)建的mimeMessage對象。
@Component
public class MailServiceImpl implements MailService{
@Autowired
private JavaMailSender javaMailSender;
@Override
public void sendMail() {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
try {
helper.setFrom("123@qq.com(帥鍋)");
helper.setTo("456@qq.com");
helper.setSubject("你好");
helper.setText("<a href='https://www.qq.com'>點我</a>",true);
} catch (MessagingException e) {
e.printStackTrace();
}
javaMailSender.send(mimeMessage);
}
}
通過測試方法測試郵件發(fā)送。
@SpringBootTest
public class MailTest {
@Autowired
private MailService mailService;
@Test
void test(){
mailService.sendMail();
}
}
郵箱收到了發(fā)送的郵件,連接是可以點擊的,是一個HTML格式的郵件。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。