JAVA发送带附件邮件

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
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;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;

public void sendAttachment(MailBean mailBean) throws Exception{
    	Properties props = new Properties();
    	props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.auth", "true");
        Session session = Session.getInstance(props);
        Message message = new MimeMessage(session);
        InternetAddress from = new InternetAddress("xxxx@qq.com");    // 邮件发送者地址
        from.setPersonal(MimeUtility.encodeText("吴彦祖"));    // 发件人
        message.setFrom(from);
        InternetAddress to = new InternetAddress(mailBean.getRecipient());
        message.setRecipient(Message.RecipientType.TO, to);
        message.setSubject(MimeUtility.encodeText(mailBean.getSubject()));
        message.setSentDate(new Date());
        MimeMultipart msgMultipart = new MimeMultipart("mixed");// 指定为混合关系
        message.setContent(msgMultipart);
        // 邮件内容
        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(mailBean.getContent(), "text/html;charset=UTF-8");
        // 组装的顺序非常重要,一定要先组装文本域,再组装文件
        msgMultipart.addBodyPart(htmlPart);
        
        // 组装附件
        if(mailBean.getAttachmentPath() != null){
        	MimeBodyPart file = new MimeBodyPart();
        	URL url = new URL(mailBean.getAttachmentPath());
        	HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        	//设置超时间为3秒
        	conn.setConnectTimeout(3*1000);
        	//防止屏蔽程序抓取而返回403错误
        	conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        	InputStream inputStream = conn.getInputStream();
        	DataSource dataSource1=new ByteArrayDataSource(inputStream, "application/octet-stream");
        	DataHandler dh = new DataHandler(dataSource1);
        	file.setDataHandler(dh);
        	// 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
        	file.setFileName(MimeUtility.encodeWord(mailBean.getFileName() != null ? mailBean.getFileName() : dh.getName(),"utf-8","B"));
        	msgMultipart.addBodyPart(file);  // 添加附件,可添加多个
        }
        
        message.saveChanges();
        Transport transport = session.getTransport("smtp");
        transport.connect("smtp.qq.com", -1, "xxxx@qq.com", "a123456");  // 主机,发送者地址,密码
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
        logger.info("邮件发送完毕");
}

@Getter
@Setter
@ToString
public class MailBean implements Serializable{

    // 邮件接收人
    private String recipient;

    // 邮件主题
    private String subject;

    // 邮件内容
    private String content;

    // 附件Http地址
    private String attachmentPath;
    
    // 附件名称, 吴彦祖.jpg
    private String fileName;
    
}

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值