java发送Email邮件

本文介绍了一个用于Java应用中发送邮件的实用类,该类利用JavaMail API实现了邮件的发送功能,包括设置SMTP服务器、邮件地址、主题及正文等,并支持发送纯文本或HTML格式的邮件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要mail.jar/activation.jar/j2ee.jar

 

package mail;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class Mail {
 /** 发件方式 - 普通发送 */
 final public static int TO = 0;
 /** 发件方式 - 抄送 */
 final public static int CC = 1;
 /** 发件方式 - 密件抄送 */
 final public static int BCC = 2;

 /** 邮件相关信息 - SMTP 服务器 */
 private String mailSMTPHost = null;
 /** 邮件相关信息 - 邮件用户名 */
 private String mailUser = null;
 /** 邮件相关信息 - 密码 */
 private String mailPassword = null;
 /** 邮件相关信息 - 发件人邮件地址 */
 private String mailFromAddress = null;
 /** 邮件相关信息 - 邮件主题 */
 private String mailSubject = "";
 /** 邮件相关信息 - 邮件发送地址 */
 private Address[] mailTOAddress = null;
 /** 邮件相关信息 - 邮件抄送地址 */
 private Address[] mailCCAddress = null;
 /** 邮件相关信息 - 邮件密件抄送地址 */
 private Address[] mailBCCAddress = null;
 /** 邮件相关信息 - 邮件正文(复合结构) */
 private MimeMultipart mailBody = null;

 public Mail() {
  mailBody = new MimeMultipart();
 }

 /**
  * 设置 SMTP 服务器
  * @param strSMTPHost 邮件服务器名称或 IP
  * @param strUser 邮件用户名
  * @param strPassword 密码
  */
 public void setSMTPHost(String strSMTPHost, String strUser,
   String strPassword) {
  this.mailSMTPHost = strSMTPHost;
  this.mailUser = strUser;
  this.mailPassword = strPassword;
 }

 /**
  * 设置邮件发送地址
  * @param strFromAddress 邮件发送地址
  */
 public void setFromAddress(String strFromAddress) {
  this.mailFromAddress = strFromAddress;
 }

 /**
  * 设置邮件目的地址
  * @param strAddress 邮件目的地址列表, 不同的地址可用;号分隔
  * @param iAddressType 邮件发送方式 (TO 0, CC 1, BCC 2) 常量已在本类定义
  * @throws AddressException
  */
 public void setAddress(String strAddress, int iAddressType) throws
 AddressException {
  switch (iAddressType) {
  case Mail.TO: {
   ArrayList alAddress = StringHelper.split(strAddress, ';');
   mailTOAddress = new Address[alAddress.size()];
   for (int i = 0; i < alAddress.size(); i++) {
    mailTOAddress[i] = new InternetAddress( (String) alAddress.get(i));
   }
   break;
  }
  case Mail.CC: {
   ArrayList alAddress = StringHelper.split(strAddress, ';');
   mailCCAddress = new Address[alAddress.size()];
   for (int i = 0; i < alAddress.size(); i++) {
    mailCCAddress[i] = new InternetAddress( (String) alAddress.get(i));
   }
   break;
  }
  case Mail.BCC: {
   ArrayList alAddress = StringHelper.split(strAddress, ';');
   mailBCCAddress = new Address[alAddress.size()];
   for (int i = 0; i < alAddress.size(); i++) {
    mailBCCAddress[i] = new InternetAddress( (String) alAddress.get(i));
   }
   break;
  }
  }
 }

 /**
  * 设置邮件主题
  * @param strSubject 邮件主题
  */
 public void setSubject(String strSubject) {
  this.mailSubject = strSubject;
 }

 /**
  * 设置邮件文本正文
  * @param strTextBody 邮件文本正文
  * @throws MessagingException
  */
 public void setTextBody(String strTextBody) throws MessagingException {
  MimeBodyPart mimebodypart = new MimeBodyPart();
  mimebodypart.setText(strTextBody, "GBK");
  mailBody.addBodyPart(mimebodypart);
 }

 /**
  * 设置邮件超文本正文
  * @param strHtmlBody 邮件超文本正文
  * @throws MessagingException
  */
 public void setHtmlBody(String strHtmlBody) throws MessagingException {
  MimeBodyPart mimebodypart = new MimeBodyPart();
  mimebodypart.setDataHandler(new DataHandler(strHtmlBody, "text/html;charset=GBK"));
  mailBody.addBodyPart(mimebodypart);
 }

 /**
  * 设置邮件正文外部链接 URL, 信体中将包含链接所指向的内容
  * @param strURLAttachment 邮件正文外部链接 URL
  * @throws MessagingException
  * @throws MalformedURLException
  */
 public void setURLAttachment(String strURLAttachment) throws
 MessagingException, MalformedURLException {
  MimeBodyPart mimebodypart = new MimeBodyPart();
  mimebodypart.setDataHandler(new DataHandler(new URL(strURLAttachment)));
  mailBody.addBodyPart(mimebodypart);
 }

 /**
  * 设置邮件附件
  * @param strFileAttachment 文件的全路径
  * @throws MessagingException
  * @throws UnsupportedEncodingException
  */
 public void setFileAttachment(String strFileAttachment) throws
 MessagingException, UnsupportedEncodingException {
  File path = new File(strFileAttachment);
  if (!path.exists() || path.isDirectory()) {
   return;
  }
  String strFileName = path.getName();
  MimeBodyPart mimebodypart = new MimeBodyPart();
  mimebodypart.setDataHandler(new DataHandler(new FileDataSource(
    strFileAttachment)));
  // modified by zord @ 2003/6/16 to support Chinese File Name
  // mimebodypart.setFileName(strFileName);
  mimebodypart.setFileName(MimeUtility.encodeText(strFileName));
  // end of modify
  mailBody.addBodyPart(mimebodypart);
 }

 /**
  * 邮件发送(一次发送多个地址, 优点速度快, 但是有非法邮件地址时将中断发送操作)
  * @throws MessagingException
  */
 public void sendBatch() throws MessagingException {
  Properties properties = new Properties();
  properties.put("mail.smtp.host", this.mailSMTPHost);
  Session session = Session.getInstance(properties, null);
  MimeMessage mimemessage = new MimeMessage(session);
  mimemessage.setFrom(new InternetAddress(this.mailFromAddress));
  if (mailTOAddress != null) {
   mimemessage.addRecipients(javax.mail.Message.RecipientType.TO,
     this.mailTOAddress);
  }
  if (mailCCAddress != null) {
   mimemessage.addRecipients(javax.mail.Message.RecipientType.CC,
     this.mailCCAddress);
  }
  if (mailBCCAddress != null) {
   mimemessage.addRecipients(javax.mail.Message.RecipientType.BCC,
     this.mailBCCAddress);
  }
  mimemessage.setSubject(this.mailSubject);
  mimemessage.setContent(this.mailBody);
  mimemessage.setSentDate(new Date());

  Transport transport = session.getTransport("smtp");
  transport.connect(this.mailSMTPHost, this.mailUser, this.mailPassword);
  Transport.send(mimemessage);

  System.out.println("已向下列邮箱发送了邮件");
  if (mailTOAddress != null) {
   for (int i = 0; i < mailTOAddress.length; i++) {
    System.out.println(mailTOAddress[i]);
   }
  }
  if (mailCCAddress != null) {
   for (int i = 0; i < mailTOAddress.length; i++) {
    System.out.println(mailCCAddress[i]);
   }
  }
  if (mailBCCAddress != null) {
   for (int i = 0; i < mailTOAddress.length; i++) {
    System.out.println(mailBCCAddress[i]);
   }
  }
 }

 static public void main(String str[]) throws MessagingException
 {
  Mail mail=new Mail();
  mail.setAddress("jgls@21cn.com",Mail.TO);
  mail.setFromAddress("jgls@21cn.com");
  mail.setSMTPHost("mail.21cn.com","","");
  mail.setSubject("测试一下");
  mail.setHtmlBody("");
  mail.sendBatch();
 }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值