关于javaMail的发送邮件之简便方法(邮件带有附件及html内容中携带图标)

JavaMail示例
本文介绍如何使用JavaMail发送带有HTML内容及附件的电子邮件,并演示了如何处理中文乱码问题。

通过一段代码来说明如何发送一封带有附件的邮件,邮件正文为html并携带图片

注:通过学习传智播客张孝祥老师的视频掌握的。

首先引入javaMail相关的jar包:mailapi.jar、smtp.jar(其中mailapi.jar是开发使用到的,smtp.jar是运行时用到的)

public class JavaMailDemo{

    public static void main(String []args){

         Properties porps = new Properties();//创建Properties对象

         props.setProperty("mail.smtp.auth","true");//设置需要认证

         props.setProperty("mail.transport.protocol","smtp");//设置协议为smtp

         props.setProperty("mail.host", "smtp.163.com");

//获得Session,两种方式:1 Session.getDefaultInstance(props)  2 Session.getInstance(props);两种方式的区别是,1中多次调用获得是相同的session对象,2中多次调用获得的是不同的对象。

          Session session = Session.getDefaultInstance(props);

          Message msg = new MimeMessage(session);//创建邮件

//发件人地址,解决中文乱码问题

          msg.setFrom(new InternetAddress("/""+MimeUtility.encodeText("张三")+"/""+"<xxxxxx@163.com>")));

         msg.setSubject("使用javaMail发送多媒体邮件");//设置邮件主题

         msg.setRecipients(RecipientType.TO,InternetAddress.parse("MimeUtility.encodeText("王XX")+"<xxxxxxxx@126.com>,"
      +MimeUtility.encodeText("张XX")+"<xxxxxxxx@163.com>""));//多个收件人地址,并解决中文乱码问题

         msg.setReplyTo(new Address[]{
               new InternetAddress("xxxxx@163.com"),
               new InternetAddress("xxxxx@qq.com"),
  });//设置回复人地址

        MimeBodyPart affix1 = new MimeBodyPart();//附件1

            MimeBodyPart affix2 = new MimeBodyPart();//附件2 

//----------------------------------------------------------------------//

        DataSource ds1 = new FileDataSource( "E://附件1.txt");//创建一个文件数据源
        DataHandler dh1 = new DataHandler(ds1);
        affix1 .setDataHandler(dh1);
        affix1 .setFileName(MimeUtility.encodeText("附件1.txt"));//给附件设置文件名

//----------------------------------------------------------------------//

        DataSource ds2 = new FileDataSource( "D://附件2.pdf");//创建一个文件数据源
        DataHandler dh2 = new DataHandler(ds2);
        affix2 .setDataHandler(dh2);
        affix2 .setFileName(MimeUtility.encodeText("附件2.pdf"));//给附件设置文件名

//-----------------------------------------------------------------------//

        MimeMultipart bodyMultipart = new MimeMultipart();//html+gif                  

        bodyMultipart.setSubType("related");//设置为关联型
        MimeBodyPart html = new MimeBodyPart();
        MimeBodyPart gif = new MimeBodyPart();

        htmlPart.setContent( "使用javaMail发送邮件src='http://www.sjz.com.cn/logo.gif'></img>" ,"text/html;charset=utf-8");//设置邮件内容为html内嵌img图片

        DataSource gsh = new FileDataSource("D://logo.gif");//获得图片的数据源
        DataHandler gifDh = new DataHandler(gsh);
        gif .setDataHandler(gifDh);
        gif .setHeader("Content-Location", "http://www.sjz.com.cn/logo.gif");//设置html中引用图片的实际地址

        bodyMultipart.addBodyPart(html);
        bodyMultipart.addBodyPart(gif);

        MimeBodyPart content = new MimeBodyPart(); //邮件内容
        content.setContent(bodyMultipart);

//---------------------------------------------------------------//

       MimeMultipart multipart= new MimeMultipart("mixed");//混合型

       multipart.addBodyPart(content);//添加html+gif
       multipart.addBodyPart(affix1 );//添加附件1
       multipart.addBodyPart(affix2 );//添加附件2
       msg.setContent(multipart);//将有件内容设置为html+gif+附件1 2

//1下面可以将文件存放在本地eml文件中,然后发送本地的文件;2也可以直接发送出去

/**1:将文件存放到本地demo.eml文件中

      msg.saveChanges();//生成文本
      OutputStream ous = new FileOutputStream("d://demo.eml");
      msg.writeTo(ous);//写出到文件
      ous.close();

//想送时,读取本地文件即可

     MimeMessage msg1 = new MimeMessage(session,new FileInputStream("D://demo.eml"));
  Transport.send(msg1,InternetAddress.parse("xxxxxx@126.com,xxxx@qq.com"));

*/

//2:直接发送

     Transport transport = session.getTransport();
     transport.connect("smtp.163.com", 25,"用户名","密码");
     transport.sendMessage(msg, new Address[]{new InternetAddress("xxxx@163.com"),new InternetAddress("xxxx@qq.com")});
  transport.close();

     }

}

Transport的send和sendMessage方法:

send是静态的方法sendMessage是实例方法,send封装了连接邮件服务器、发送、关闭的操作,而sendMessage仅仅是发送,如果要连续法多封邮件,应该使用sendMessage效率高

send中如何连接邮件服务器:在session中封装用户名和密码

    Session session = Session.getInstance(props,new Authenticator(){
  
   @Override
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("用户名", "密码");
   }
   
  });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值