互联网邮件发送

  上回书说道,“世界上最复杂的邮件”发送,但是那只是针对局域网的邮件发送,今天又添加了新的内容,则是互联网的邮件发送;如果大家对局域网的邮件发送好不了解就直接访问我的博客:进行查看和学习,这里我就不多说了,直入正题

 我们先来介绍一下几个重要的类JavaMail API按其功能划分通常可分为如下三大类:

创建和解析邮件内容的API :

Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。 

发送邮件的API:

Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。 

接收邮件的API:

Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。 

Session类 

Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。 

介绍完重要的类的作用之后我们再来看看几个方法的作用:

 

Properties part = new Properties();//创建Properties对象
part.setProperty("mail.host", "smtp.sohu.com");//邮寄服务器
part.setProperty("mail.transport.protocol", "smtp");//邮寄协议
part.setProperty("mail.smpt.auth", "true");//登录验证
 
 
        Transport pst=session.getTransport();
pst.connect("wangliaizq@sohu.com", "密码");//输入用户名,密码
pst.sendMessage(message, message.getAllRecipients());//将发送的邮件进行发送
    pst.close();  //关闭

 

主要就是Properties 类和Transport大家可以参考javamai  API

在创建邮件的方法和在上次写的局域网邮件发送一样

        互联网邮件发送源代码:

        

package cn.csdn.mail;
 
import java.util.Properties;
 
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
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;
 
public class SendMessage {
    public static void main(String[] args) {
// 创建邮件
// 属性创建
 
        Properties part = new Properties();//创建Properties对象
part.setProperty("mail.host", "smtp.sohu.com");//邮寄服务器
part.setProperty("mail.transport.protocol", "smtp");//邮寄协议
part.setProperty("mail.smpt.auth", "true");//登录验证
// 创建session
Session session = Session.getInstance(part);
         Message message=creatMessage(session);
          try {
 
        Transport pst=session.getTransport();
pst.connect("wangliaizq@sohu.com", "密码");//输入用户名,密码
pst.sendMessage(message, message.getAllRecipients());//将发送的邮件进行发送
    pst.close();  //关闭
        pst.close();
            } catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 
      public static Message creatMessage(Session session) {
 
  MimeMessage message = new MimeMessage(session);
 
try {
message.setFrom(new InternetAddress("wangliaizq@sohu.com"));
message.setRecipients(Message.RecipientType.TO,"1103890851@qq.com");
 
message.setSubject("美女一个");
 
//创建邮件体
MimeBodyPart  text=new MimeBodyPart();
text.setContent("美女一个<br/><img src='m.jpg'>""text/html;charset=utf8");
  //创建图片
    MimeBodyPart image=new MimeBodyPart();
    image.setDataHandler(new DataHandler(new ileDataSource("src//mm.jpg")));
    image.setContentID("m.jpg");
    
  //创建附件
  MimeBodyPart accth=new MimeBodyPart();
  DataHandler acc=new DataHandler(new FileDataSource("src//大.mp3"));
  accth.setDataHandler(acc);
  String  filename=acc.getName();
  accth.setFileName(MimeUtility.encodeText(filename));//解决中文乱码
    
    //设置描述关系
    MimeMultipart  mm=new MimeMultipart();
    mm.addBodyPart(text);
    mm.addBodyPart(image);
    mm.setSubType("related");
    
    //图片与正文的Bobypart
    MimeBodyPart part=new MimeBodyPart();
    part.setContent(mm);
    //附件与以上的bobypary
    MimeMultipart m=new MimeMultipart();
     m.addBodyPart(part);
     m.addBodyPart(accth);
     m.setSubType("mixed");
     //
    message.setContent(m);
    message.saveChanges();
    
   } catch (Exception e) {
e.printStackTrace();
 
  }
  
 
return message;
 
}
 
}

结束语

在发送互联网邮件是,在创建邮件和发送邮件是在两个不同的方法,也可以直接写在一个方法体中。发家不放试试。但是经过测试在用互联网发送带有图片的邮件不能在新浪,搜狐邮件中打开,这个问题正在解决但是在QQ邮箱中能打开。希望大家继续关注