本教程将帮助您掌握使用本地Java库通过SMTP通过java应用程序发送电子邮件的过程。尽管它很简单,但Jakarta Mail(以前称为JavaMail)使您可以使用SMTP,POP3或IMAP协议发送和接收HTML电子邮件,包括图像和附件。

java程序异步发送邮件(教你最简单地从Java应用程序发送电子邮件)(1)


从设置到生成邮件,再通过Gmail SMTP发送邮件,我们将进行整个过程。

雅加达邮件设置

如果您在2019年7月之前开始使用Java,那么Jakarta Mail名称听起来可能有点陌生。但是从那时起,Java软件已经成为Jakarta品牌的一部分。

要安装邮件包,应将jakarta.mail.jar文件添加到CLASSPATH环境中。如果使用Java EE或Jakarta EE,则此文件已包含在软件包中。否则,您可以从Jakarta Mail API官方页面下载它。

另外,您可以使用Maven依赖项来实现它,如下所示:

<依赖项>

<依赖性>

<groupId> com.sun.mail </ groupId>

<artifactId> javax.mail </ artifactId>

<version> 1.6.2 </ version>

</ dependency>

</ dependencies>

如何使用Gmail配置电子邮件发送

您的Java应用程序可以与任何可用的SMTP服务器集成以发送电子邮件。在这里,我们将演示如何配置Gmail(常用选项之一)。

您应该做的唯一技巧就是允许您的Gmail帐户访问。最简单的方法是在此处启用“允许安全性较低的应用程序” 选项。推荐的安全选项是使用oAuth2身份验证。但是,这是一种更高级的方法,需要其他配置。首先,您需要从Google Developers Console获取访问令牌。有关详细说明和说明,请参阅Google文档。

然后,要通过Jakarta Mail访问Gmail服务器,您需要满足以下参数:

导入java.util。*;

导入javax.mail。*;

导入javax.mail.internet。*;

导入javax.activation。*;

在本文的后面,我们将介绍访问Gmail SMTP的简单方法。

要继续,我们需要导入相关的类并添加属性,尤其是:

§ SendEmail公共类,用于指定电子邮件头

§ javax.mail.PasswordAuthentication类,用于正确的身份验证

§ javax.mail.Transport用于发送消息

§ javax.mail.internet.Mimemessage

§ SMTP设置(主机,端口,用户名和密码),它们定义为props.put

§ message.setText用于简单的纯文本消息

这是完整的代码示例:

包com.example.smtp;

导入java.util.Properties;

导入javax.mail.Message;

导入javax.mail.MessagingException;

导入javax.mail.PasswordAuthentication;

导入javax.mail.Session;

导入javax.mail.Transport;

导入javax.mail.internet.InternetAddress;

导入javax.mail.internet.MimeMessage;

公共类SendEmail {

公共静态void main(String [] args){

// 添加收件人

字符串=“ test@example.com”;

//添加发件人

来自=“ myusername@gmail.com”的字符串;

final String用户名=“ myusername@gmail.com”; //您的Gmail用户名

最终的字符串密码=“ mypassword”; //您的Gmail密码

字符串主机=“ smtp.gmail.com”;

属性props = new Properties();

props.put(“ mail.smtp.auth”,“ true”);

props.put(“ mail.smtp.starttls.enable”,“ true”);

props.put(“ mail.smtp.host”,host);

props.put(“ mail.smtp.port”,“ 587”);

//获取会话对象

会话会话= Session.getInstance(props,

新的javax.mail.Authenticator(){

受保护的PasswordAuthentication getPasswordAuthentication(){

返回新的PasswordAuthentication(用户名,密码);

}

});

尝试{

//创建一个默认的MimeMessage对象

消息消息=新的MimeMessage(会话);

message.setFrom(new InternetAddress(from));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(to));

//设置主题

message.setSubject(“ Hi JAXenter”);

//放入您的消息内容

message.setText(“嗨,我们只是在这里尝试JavaMail”);

// 发信息

Transport.send(message);

System.out.println(“已成功发送消息。...”);

} catch(MessagingException e){

抛出新的RuntimeException(e);

}

}

}

带有图片和附件的HTML电子邮件

在大多数情况下,电子邮件通知包含格式,文件附件或图像。为此,您必须添加HTML内容。在Jakarta Mail中,您应该使用SendHTMLEmailMimeMessage.setContent,并指出text / html类型。最好在MimeMultipart(“ alternative”)对象中同时包含HTML和纯文本。

将图像嵌入到电子邮件中的最简单方法(例如,公司徽标)是将其上传到可靠的外部服务器,并在HTML代码中引用它,如下所示:

包com.example.smtp;包com.example.smtp;导入java.util.Properties;

导入javax.mail.Message;导入javax.mail.MessagingException;

导入javax.mail.PasswordAuthentication;导入javax.mail.Session;

导入javax.mail.Transport;导入javax.mail.internet.InternetAddress;

导入javax.mail.internet.MimeMessage;

公共类SendHTMLEmail {

公共静态void main(String [] args){

字符串为=“ johndoe@gmail.com”;

字符串来自=“ yourmail@example.com”;

final String用户名=“ yourlogin”;

final String password =“您的密码”;

字符串主机=“ smtp.example.com”;

属性props = new Properties();

props.put(“ mail.smtp.auth”,“ true”);

props.put(“ mail.smtp.starttls.enable”,“ true”);

props.put(“ mail.smtp.host”,host);

props.put(“ mail.smtp.port”,“ 2525”);

//获取会话对象

会话会话= Session.getInstance(props,

新的javax.mail.Authenticator(){

受保护的PasswordAuthentication getPasswordAuthentication(){

返回新的PasswordAuthentication(用户名,密码);

}

});

尝试{

//创建一个默认的MimeMessage对象

消息消息=新的MimeMessage(会话);

message.setFrom(new InternetAddress(from));

message.setRecipients(Message.RecipientType.TO,

InternetAddress.parse(to));

message.setSubject(“带有图片和附件的HTML消息”);

//将HTML内容放在此处,并引用托管图片

message.setContent(

“ <p> <img src =” https://yourserver.com/yourlogo.png“ alt =” img“ /> </ p>

<p>嘿,您喜欢我们的徽标吗?</ p>”,

“文本/ html”);

// 发信息

Transport.send(message);

System.out.println(“已成功发送消息。...”);

} catch(MessagingException e){

e.printStackTrace(); 抛出新的RuntimeException(e);

}

}

}

另一种方法是使用CID附件。这有点复杂,因为您应该创建MIME多部分/相关消息,然后引用HTML正文中的图像。如果图像不是存储在图像文件中,而是存储在内存中的字节数组中,则也可以使用此方法。

Multipart multipart =新的MimeMultipart(“ related”);

MimeBodyPart htmlPart =新的MimeBodyPart();

//将图片引用到HTML正文<img src =“ cid:some-image-cid” alt =“ img” />

htmlPart.setText(messageBody,“ utf-8”,“ html”);

multipart.addBodyPart(htmlPart);

MimeBodyPart imgPart =新的MimeBodyPart();

//用于存储在文件中的图像

imgPart.attachFile(imageFile);

//对于存储在内存中的字节数组中的图像

// imgPart.setDataHandler(new DataHandler(

// new ByteArrayDataSource(bytes,“ image / whatever”)));

imgPart.setContentID(“ <some-image-cid”>“);

multipart.addBodyPart(imgPart);

message.setContent(multipart);

最后,让我们在邮件中附加一个文件。不管使用哪种文件类型,都可以通过如下方式将attachFile方法放入MimeBodyPart中来完成:

公共静态无效setAttachment(消息消息,字符串文件名)抛出MessagingException {

//创建多部分消息

Multipart multipart = new MimeMultipart();

BodyPart messageBodyPart =新的MimeBodyPart();

//指定您的文件

DataSource源=新的FileDataSource(filename);

messageBodyPart.setDataHandler(new DataHandler(source));

messageBodyPart.setFileName(filename);

//添加文件部分

multipart.addBodyPart(messageBodyPart);

message.setContent(multipart);

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

java程序异步发送邮件(教你最简单地从Java应用程序发送电子邮件)(2)


java程序异步发送邮件(教你最简单地从Java应用程序发送电子邮件)(3)

,