java mail send

本文介绍了一个使用JavaMail API实现的邮件发送类JavaMailSendingHandler。该类实现了ILocalEmailSendingHandler接口,并提供了send方法来发送邮件。send方法中利用了JavaMail的MimeMessage类构造邮件,并通过JNDI查找邮件服务器。

publicclassJavaMailSendingHandlerimplementsILocalEmailSendingHandler {

  
publicvoidsend(String to, String from, String subject, String content, String contentType)throwsException {

  Properties props
=newProperties();

  props.put(
"mail.smtp.localhost", getHost(from));

  String server
=getSMTPServerByJNDI(getHost(to));

  props.setProperty(
"mail.smtp.host", server);

  Session session
=Session.getInstance(props,null);

  MimeMessage message
=newMimeMessage(session);

  message.setContent(content, contentType);

  message.setSender(
newInternetAddress(from));

  message.setFrom(
newInternetAddress(from));

  message.setRecipient(RecipientType.TO,
newInternetAddress(to));

  message.setSubject(subject);

  message.setHeader(
"Content-Type", contentType);

  message.setHeader(
"Content-Transfer-Encoding","7bit");

  SimpleDateFormat format
=newSimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");

  message.setHeader(
"Date", format.format(newDate()));

  Transport.send(message,
newAddress[] {newInternetAddress(to) });

  }

  
privateString getHost(String address) {

  
returnaddress.substringaddress.indexOf('@')+1);

  }

  
//通过JNDI 查找给定域的邮件服务器。

  
privateString getSMTPServerByJNDI(String host)throwsException {

  Properties jndiEnvironmentProperties
=newProperties();

  jndiEnvironmentProperties.put(
"java.naming.factory.initial","com.sun.jndi.dns.DnsContextFactory");

  DirContext initialDirContext
=newInitialDirContext(jndiEnvironmentProperties);

  Attributes attributes
=initialDirContext.getAttributes(host,newString[] {"MX"});

  Attribute attribute
=attributes.get("MX");

  String[] servers
=newString[attribute.size()];

  
for(inti=0; i<attribute.size(); i++) {

  servers[i]
=attribute.get(i).toString();

  }

  String server
=servers[0];

  server
=server.substring(server.indexOf("")+1, servers[0].length()-1);

  
returnserver;

  }

  }

Java中发送电子邮件,通常使用JavaMail API,这是一个标准的扩展库,允许开发者在应用程序中集成邮件发送功能。JavaMail API提供了丰富的类和接口,如`MimeMessage`、`Session`、`Transport`等,用于构建和发送电子邮件。 ### 发送简单文本邮件 下面是一个使用JavaMail API发送简单文本邮件的基本示例。此示例中使用了`MimeMessage`来构建邮件内容,并通过`Transport`类发送邮件[^1]。 ```java import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class SimpleEmailSender { public static void main(String[] args) { // 邮件服务器配置 String host = "smtp.163.com"; // SMTP服务器地址 int port = 465; // SMTP服务器端口号 final String username = "dfh_414@163.com"; // 发件人邮箱账号 final String password = "KSFIDNNNLZCVLAUT"; // 授权码 // 收件人地址 String to = "xxxxxx@qq.com"; // 设置邮件服务器属性 Properties props = new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.port", port); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); // 创建会话 Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { // 创建邮件对象 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject("测试邮件"); message.setText("网易邮箱给QQ邮箱发消息了!"); // 发送邮件 Transport.send(message); System.out.println("邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); } } } ``` ### 发送HTML邮件 如果需要发送包含HTML格式内容的邮件,可以使用`MimeMessage`的`setContent()`方法,指定内容类型为`text/html`[^2]。 ```java // 创建邮件对象 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject("HTML邮件测试"); // HTML内容 String htmlContent = "<h1>这是一个HTML邮件</h1><p>支持<b>加粗</b>和<i>斜体</i>文字。</p>"; message.setContent(htmlContent, "text/html; charset=utf-8"); ``` ### 发送带有附件的邮件 发送带有附件的邮件时,需要创建`MimeBodyPart`对象来表示每个部分,然后将这些部分添加到`MimeMultipart`对象中,最后将这个多部分对象设置为邮件的内容[^2]。 ```java // 创建邮件对象 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject("带附件的邮件"); // 创建多部分消息 MimeMultipart multipart = new MimeMultipart(); // 创建文本部分 MimeBodyPart textPart = new MimeBodyPart(); textPart.setText("这是一封带有附件的邮件。"); multipart.addBodyPart(textPart); // 创建附件部分 MimeBodyPart attachmentPart = new MimeBodyPart(); FileDataSource fileDataSource = new FileDataSource("path/to/file.txt"); attachmentPart.setDataHandler(new DataHandler(fileDataSource)); attachmentPart.setFileName(fileDataSource.getName()); multipart.addBodyPart(attachmentPart); // 将多部分内容设置为邮件内容 message.setContent(multipart); ``` ### 邮件发送配置 为了简化邮件发送过程,特别是在Spring Boot项目中,可以通过添加依赖项和配置来实现邮件发送功能[^3]。 #### Maven依赖 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>1.6.7</version> <scope>compile</scope> </dependency> ``` #### application.yml 配置 ```yaml spring: mail: protocol: smtps host: smtp.163.com username: dfh_414@163.com password: KSFIDNNNLZCVLAUT default-encoding: UTF-8 port: 465 properties: mail: stmp: ssl: enable: true ``` 以上代码和配置展示了如何使用Java发送不同类型(文本、HTML、带附件)的电子邮件,以及如何在Spring Boot项目中配置邮件发送功能。希望这些信息能帮助你实现Java邮件发送功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值