java ncso发送电邮
本教程将帮助您掌握使用本地Java库通过SMTP从Java应用程序发送电子邮件的过程。 尽管它很简单,但Jakarta Mail(以前称为JavaMail)允许您使用SMTP,POP3或IMAP协议发送和接收HTML电子邮件,包括图像和附件。
从设置到生成邮件,再通过Gmail SMTP发送邮件,我们将进行整个过程。
雅加达邮件设置
如果您在2019年7月之前开始使用Java,那么Jakarta Mail名称听起来可能有点陌生。 但是从那时起,Java软件已成为Jakarta品牌的一部分。
要安装邮件包,应将jakarta.mail.jar文件添加到CLASSPATH环境中。 如果使用Java EE或Jakarta EE,则此文件已包含在软件包中。 否则,您可以从Jakarta Mail API官方页面下载它。
另外,您可以使用Maven依赖项来实现它,如下所示:
<dependencies>
<dependency>
<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服务器,您需要满足以下参数:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
本文稍后将介绍访问Gmail SMTP的简单方法。
要继续,我们需要导入相关的类并添加属性,尤其是:
- SendEmail公共类,用于指定电子邮件头
- javax.mail.PasswordAuthentication类,用于正确的身份验证
- javax.mail.Transport用于发送消息
- javax.mail.internet.MimeMessage
- SMTP设置 (主机,端口,用户名和密码),它们定义为props.put
- message.setText用于简单的纯文本消息
还请参见: 2019年八月节状态:Python首次超过Java
这是完整的代码示例:
package com.example.smtp;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void main(String[] args) {
// Add recipient
String to = "test@example.com";
// Add sender
String from = "myusername@gmail.com";
final String username = "myusername@gmail.com";//your Gmail username
final String password = "mypassword";//your Gmail password
String host = "smtp.gmail.com";
Properties 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");
// Get the Session object
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject
message.setSubject("Hi JAXenter");
// Put the content of your message
message.setText("Hi there,we are just experimenting with JavaMail here");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
带有图片和附件HTML电子邮件
在大多数情况下,电子邮件通知包含格式,文件附件或图像。 为此,您必须添加HTML内容。 在Jakarta Mail中,您应该使用SendHTMLEmail类MimeMessage.setContent ,并指出text / html类型。 最好在MimeMultipart(“ alternative”)对象中同时包含HTML和纯文本。
将图像嵌入到电子邮件中的最简单方法(例如,公司徽标)是将其上传到可靠的外部服务器,并在HTML代码中引用它,如下所示:
package com.example.smtp;package com.example.smtp;import java.util.Properties;
import javax.mail.Message;import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;import javax.mail.Session;
import javax.mail.Transport;import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendHTMLEmail {
public static void main(String[ ] args) {
String to = "johndoe@gmail.com";
String from = "yourmail@example.com";
final String username = "yourlogin";
final String password = "yourpassword";
String host = "smtp.example.com";
Properties 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");
// Get the Session object
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject("HTML message with an image and attachment");
// Put your HTML content here as well as refer to the hosted image
message.setContent(
"<p><img src="https://yourserver.com/yourlogo.png" alt="img" /></p> +
<p>Hey, do you like our logo?</p>",
"text/html");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
e.printStackTrace(); throw new RuntimeException(e);
}
}
}
另一种方法是使用CID附件。 这有点复杂,因为您应该创建MIME多部分/相关消息,然后引用HTML正文中的图像。 如果图像不是存储在图像文件中,而是存储在内存中的字节数组中,则也可以使用此方法。
Multipart multipart = new MimeMultipart("related");
MimeBodyPart htmlPart = new MimeBodyPart();
//reference to your image to the HTML body <img src="cid:some-image-cid" alt="img" />
htmlPart.setText(messageBody, "utf-8", "html");
multipart.addBodyPart(htmlPart);
MimeBodyPart imgPart = new MimeBodyPart();
// for the image stored in the file
imgPart.attachFile(imageFile);
//for the image stored in a byte array in memory
// imgPart.setDataHandler(new DataHandler(
// new ByteArrayDataSource(bytes, "image/whatever")));
imgPart.setContentID("<some-image-cid">");
multipart.addBodyPart(imgPart);
message.setContent(multipart);
最后,让我们在邮件中附加一个文件。 不管使用哪种文件类型,都可以通过如下方式将attachFile方法放入MimeBodyPart中来完成:
public static void setAttachment(Message message, String filename) throws MessagingException {
// create a multipart message
Multipart multipart = new MimeMultipart();
BodyPart messageBodyPart = new MimeBodyPart();
// specify your file
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
//Add the file part
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
进一步的步骤
在此简短指南中,我们解释了使用Jakarta Mail发送电子邮件的工作方式,并演示了最常见的示例。 如果您想深入研究,我们建议您遵循Jakarta Mail FAQ 。
还请参见: 2019年的Java状态:“变化率比以往任何时候都高”
如果您需要制作更复杂HTML电子邮件模板,那么最好使用Spring框架和您更喜欢的模板引擎之一。
有关使用Java发送电子邮件的完整文章最初发布在Mailtrap博客上。
翻译自: https://jaxenter.com/java-app-emails-smtp-server-164144.html
java ncso发送电邮