首页 > 代码库 > JavaMail(二):利用JavaMail发送复杂邮件

JavaMail(二):利用JavaMail发送复杂邮件

    上一篇文章我们学习了利用JavaMail发送简单邮件,这篇文章我们利用JavaMail发送稍微复杂一点的邮件(包含文本、图片、附件)。这里只贴出核心代码,其余代码可参考JavaMail(一):利用JavaMail发送简单邮件

        封装发送邮件代码

/**
 * 封装发送邮件代码
 * @author fly
 * @时间 2017-05-09
 *
 */
public class Email {
    /**
     * 创建并发送一封包含文本、图片、附件的复杂邮件
     * @throws Exception 
     */
    public static void sendComplexMail(MailSenderInfo mailInfo) throws Exception{
        // 判断是否需要身份认证
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        
        if(mailInfo.isValidate()){
             // 如果需要身份认证,则创建一个密码验证器
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        // 根据session创建一个邮件消息
        Message mailMessage = new MimeMessage(sendMailSession);
        // 创建邮件发送者地址
        Address from = new InternetAddress(mailInfo.getFromAddress());
        // 设置邮件消息的发送者
        mailMessage.setFrom(from);
        // 创建邮件的接收者地址,并设置到邮件消息中
        Address to = new InternetAddress(mailInfo.getToAddress());
        // Message.RecipientType.TO属性表示接收者的类型为TO
        mailMessage.setRecipient(Message.RecipientType.TO, to);
        // 设置邮件消息的主题
        mailMessage.setSubject(mailInfo.getSubject());
        // 设置邮件消息发送的时间
        mailMessage.setSentDate(new Date());
        
        
        MimeBodyPart image = new MimeBodyPart();
        //DataHandler为图片  FileDataSource为图片数据源 (与处理附件比较类似:区别在于您必需通过设置 MimeMultipart 构造器中的子类型(或者说用 setSubType())告知 MimeMultipart 各个相关部件,并设置图像的 Content-ID ,作为图像的 src 在 img 标记中使用)
        DataHandler dh = new DataHandler(new FileDataSource("stock-photo-189028703.jpg"));
        image.setDataHandler(dh);
        //用一个给定的 cid URL 引用图像,其中 cid 是图像附件 Content-ID 头的引用 setContent时用到这个cid
        image.setContentID("tupian");
        
        BodyPart text = new MimeBodyPart();
        text.setContent("美丽的图片<br/><img src=http://www.mamicode.com/‘cid:" + image.getContentID() + "‘/>", "text/html;charset=UTF-8");
            
        MimeMultipart textImageRelated = new MimeMultipart();
        textImageRelated.addBodyPart(text);
        textImageRelated.addBodyPart(image);
        textImageRelated.setSubType("related");
        
        BodyPart textImage = new MimeBodyPart();
        textImage.setContent(textImageRelated);
        
        BodyPart attachment = new MimeBodyPart();
        //DataHandler为附件  FileDataSource为附件数据源     如果从 URL 中读时,附件的数据源是 URLDataSource
        DataHandler dh2 = new DataHandler(new FileDataSource(mailInfo.getAttachFileNames()[0]));
        attachment.setDataHandler(dh2);
        attachment.setFileName(MimeUtility.encodeText(dh2.getName()));
        
        MimeMultipart mainPart = new MimeMultipart();
        mainPart.addBodyPart(textImage);
        mainPart.addBodyPart(attachment);
        mainPart.setSubType("mixed");
        
        mailMessage.setContent(mainPart);
        // 连接邮件服务器、发送邮件、关闭连接
        Transport.send(mailMessage);
    }
}

 

    测试代码:

public class JavaMailTest {
   
    public static void main(String[] args) {
    //设置邮件相关信息 MailSenderInfo mailInfo
= new MailSenderInfo(); mailInfo.setMailServerHost("smtp.163.com"); mailInfo.setMailServerPort("25"); mailInfo.setValidate(true); mailInfo.setUserName("qfanliyan@163.com"); mailInfo.setPassword("");  // 您的邮箱密码,若你的邮箱开启了客户端授权密码,则此处是您的客户端授权密码 mailInfo.setFromAddress("qfanliyan@163.com"); mailInfo.setToAddress("ifanliyan@qq.com"); mailInfo.setSubject("这是一封测试邮件"); mailInfo.setContent("你好!这是一封测试邮件"); String[] fileName = {"手艺人.docx"}; mailInfo.setAttachFileNames(fileName); try { //Email.sendTextMail(mailInfo); //Email.sendHtmlMail(mailInfo); Email.sendComplexMail(mailInfo); } catch (Exception e) { e.printStackTrace(); } } }

 

    发送成功截图:

技术分享

技术分享

JavaMail(二):利用JavaMail发送复杂邮件