Java 发送邮件 带附件 中文附件名

import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public void send(String emailbox, //收件箱地址
    String smtp, //发件箱邮件服务器地址  如 "smtp.163.com"
    String from, //发件箱地址  ""
    String passwd, //发件箱密码  "testkey"
    String subject, //邮件标题
    String content, //邮件正文
    String fileName) //邮件附件文件名

 try {
  Properties props = new Properties();
  props.put("mail.smtp.host", smtp);
  props.put("mail.smtp.auth", "true");
  Session s = Session.getDefaultInstance(props, null);
  s.setDebug(true);
  MimeMessage msg = new MimeMessage(s);
  InternetAddress fromAddress = new InternetAddress(from);
  msg.setFrom(fromAddress); 
  InternetAddress toAddress = new InternetAddress(emailbox);
  msg.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);

  msg.setSubject(subject);
  BodyPart bp = new MimeBodyPart();
  bp.setContent(content, "text/html;charset=UTF-8");
  Multipart mp = new MimeMultipart();
  mp.addBodyPart(bp);
   
  //添加附件
  bp = new MimeBodyPart();
  FileDataSource source = new FileDataSource(fileName); 
  bp.setDataHandler(new DataHandler(source));
   
  String[] FileNames = fileName.split("//");
  String newFileName = FileNames[FileNames.length-1];
   
  bp.setFileName(javax.mail.internet.MimeUtility.encodeWord(newFileName));   //中文附件名先编码
  mp.addBodyPart(bp);
  msg.setContent(mp);
  msg.setSentDate(new Date());
  msg.saveChanges();
  Transport transport = s.getTransport("smtp");
  transport.connect(smtp, from, passwd);
  transport.sendMessage(msg, msg.getAllRecipients());
 } catch (Exception ex) {
  ex.printStackTrace();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_老杨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值