邮件发送JavaMail的开发

一、邮件开发用到的协议:SMTP、POP、RFC822、MIME
    SMTP:Simle Message Transfer Protocal 简单消息传输协议。发送邮件时使用的协议。描述了数据该如何表示。默认使用的端口:25

    POP:Post Office Protocal邮局协议。接收邮件时使用的协议。默认使用的端口:110

二、手工发送邮件和接收邮件(熟练SMTP等协议的)
        [email protected]          usst1
        [email protected]             usst2
        
       服务器地址   SMTP:smtp.163.com  POP3:pop.163.com
        
        Base64编码:
        用户名:usst1     dXNzdDE=
        密码:usst1        dXNzdDE=
        
        
    1、手工发送邮件的过程:telnet
    telnet smtp.163.com 25
    ------------------------------------------------------------以下属于SMTP协议的内容
    ehlo xjp                //向服务器打招呼
    auth login              //请求认证
                            //提示输入用户名和密码(Base64编码后的)
    dXNzdDE=
    
   dXNzdDE=
    
    mail from:<[email protected]>
    rcpt to:<[email protected]>
    
    data                      //说明邮件的开始
                            //邮件内容是要遵循一定格式的:RFC822规范
                            
    from:[email protected]                      
    to:[email protected]
    subject:这是一封手工发送的邮件
    
    aaaaaaaaaaaaaaaaaa
    bbbbbbbbbbbbbbbbbb
    .cccccccccccccccccccc
    
    ------------------------------------------------------------
    quit
        
    2、手工收取邮件(POP协议)
    telnet pop.163.com 110
    ----------------------------------以下属于POP协议的东东
    user usst2
    pass usst2
    stat                //返回邮箱的统计信息
    list 邮件编号       //返回某一封的邮件统计信息            
    retr 邮件编号       //取出某一封邮件的内容
    ----------------------------------
    quit


三、JavaMail的核心API简介
     导入jar包:mail.jar  (注意:Javamail的API依赖jaf(Java Activation Framework)框架,还需要导入jaf的jar包。如果使用的是JDK6及以上版本,就不需要了)
    Session:代表邮件的环境
    
    Message:代表邮件
    
    BodyPart:代表复杂邮件中的每一部分
    
    Multipart:描述由多个BodyPart组成的邮件的关系

四、发送一个既有文本,文本中还内嵌图片的邮件,还有附件的邮件的示例

public class sendMailDemo {

	public static void main(String[] args) throws Exception  {
		Properties props = new Properties();//环境变量设置。发送邮件时才需要
		props.setProperty("mail.transport.protocol", "smtp");//发送使用的协议
		props.setProperty("mail.host", "smtp.163.com");//发送服务器的主机地址
		props.setProperty("mail.smtp.auth", "true");//请求身份验证
		props.setProperty("mail.debug", "true");//调试模式
//		Session session = Session.getDefaultInstance(props);
		Session session = Session.getDefaultInstance(props,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("usst1","usst1");
			}
		});
		MimeMessage message = new MimeMessage(session);//代表一封邮件
		
		message.setFrom(new InternetAddress("[email protected]"));//设置发件人
		message.setRecipients(Message.RecipientType.TO, "[email protected]");//设置收件人
		message.setSubject("这是一封文本中内嵌图片的邮件");//设置主题
		
		//文本部分
		MimeBodyPart textPart = new MimeBodyPart();
		textPart.setContent("图片   begin<img src='cid:tp'/>end", "text/html;charset=UTF-8");
		//内嵌图片部分
		MimeBodyPart imagePart = new MimeBodyPart();
		DataHandler dh = new DataHandler(new FileDataSource("D:/1.jpg"));
		imagePart.setDataHandler(dh);
		imagePart.setContentID("tp");
		//文本和内嵌图片合体
		
		MimeMultipart mpart1 = new MimeMultipart();
		mpart1.addBodyPart(textPart);
		mpart1.addBodyPart(imagePart);
		mpart1.setSubType("related");
		
		MimeBodyPart textImagePart = new MimeBodyPart();
		textImagePart.setContent(mpart1);
		
		//附件部分
		MimeBodyPart attachmentPart = new MimeBodyPart();
		dh = new DataHandler(new FileDataSource("D:/附件.rar"));
		String filename = dh.getName();//获取文件名
		System.out.println(filename);
		attachmentPart.setDataHandler(dh);
		attachmentPart.setFileName(MimeUtility.encodeText(filename));//手工设置文件名.中文文件名要注意编码
		
		
		//全部合体
		MimeMultipart mpart2 = new MimeMultipart();
		mpart2.addBodyPart(textImagePart);//文本加内嵌图片
		mpart2.addBodyPart(attachmentPart);//附件
		mpart2.setSubType("mixed");//复杂关系
		
		message.setContent(mpart2);
		message.saveChanges();
		
//		message.writeTo(new FileOutputStream("D:/1.eml"));   //写入本地保存
		//发送邮件
		Transport ts = session.getTransport();//创建发送邮件
		ts.connect("usst1","usst1");//连接
		ts.sendMessage(message, message.getAllRecipients());
		
		ts.close();
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章