Java发送邮件(1)



l 邮箱加密算法

现在很多WEB应用在开发时都需要集成邮件发送功能,例如:

给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail。

给过生日的注册会员自动发送一封表示祝贺的E-Mail 。

将网站的最新活动信息通过E-Mail发送给所有的注册会员。

等等 …...

这些功能的实现都需要软件开发人员在开发WEB应用中编写相应的邮件处理程序。

搜狐邮箱、新浪邮箱

public void test1()throws Exception {

/*字节流 :

* inputStream

* outputStream

* 字符流:

* Read

* Write

* */

BufferedReader br =new  BufferedReader(new InputStreamReader(System.in));

System.out.println("请输入用户名:");

String userName=br.readLine();

System.out.println("请输入密码");

String userPass=br.readLine();

System.out.println("加密之前用户名"+userName+"加密之前密码"+userPass);

BASE64Encoder b6=new BASE64Encoder();

System.out.println("加密之前用户名"+b6.encode(userName.getBytes())+"加密之zhu前密码"+b6.encode(userPass.getBytes()));

}

}


Socket发送邮件



public class MailSend {

public static void main(String[] args) throws Exception {

Socket soc = new Socket("smtp.sohu.com", 25);

OutputStream os = soc.getOutputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(soc

.getInputStream()));

os.write("ehlo ZHULEI\r\n".getBytes());

System.out.println(br.readLine());

System.out.println(br.readLine());

System.out.println(br.readLine());

os.write("auth login\r\n".getBytes());

System.out.println(br.readLine());

os.write("emh1bGVpc2hpdG91\r\n".getBytes());

System.out.println(br.readLine());

os.write("YWJjMTk5MTI4\r\n".getBytes());

System.out.println(br.readLine());

os.write("mail from:<[email protected]>\r\n".getBytes());

System.out.println(br.readLine());

os.write("rcpt to:<[email protected]>\r\n".getBytes());

System.out.println(br.readLine());

os.write("data\r\n".getBytes());

System.out.println(br.readLine());

os.write("from:<[email protected]>\r\n".getBytes());

os.write("to:<[email protected]>\r\n".getBytes());

os.write("subject: 多多亲爱的\r\n".getBytes());

os.write("多多亲爱的\r\n".getBytes());

os.write(".\r\n".getBytes());

os.write("quit".getBytes());

os.close();

br.close();

soc.close();

}

}


利用控制台发送邮件




telnet smtp.sina.com

SMTP协议

ehlo 主机名

auth login //经过base64编码后的用户名和密码

mail from:<[email protected]

rcpt to:<[email protected]>

Data   .号代表邮件内容的结束

quit


============================OK

220 95.62 ESMTP ready

ehlo ZHULEI

250-95.62

250-AUTH PLAIN LOGIN

250 STARTTLS

auth login

334 VXNlcm5hbWU6

emh1bGVpc2hpdG91

334 UGFzc3dvcmQ6

YWJjMTk5MTI4

235 2.0.0 OK

mail from:<[email protected]>

250 2.1.0 Ok

rcpt to:<[email protected]>

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

from:<[email protected]>

to:<[email protected]>

subject: 多多亲爱的


z这是测试想你的内同


.

250 2.0.0 Ok: queued as 37C0F698F57

quit

221 2.0.0 Bye


l MIME协议发送邮件

v MIME协议是对RFC822文档的升级和补充,它描述了如何生成一封复杂邮件。通常我们把MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据称之为MIME消息。

v 对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。(查看outlook邮件源文件)






                                                           











1.发送普通的邮件

public void MimeImageMail() throws Exception {

//创建邮件

MimeMessage mm = new MimeMessage(Session.getInstance(new Properties()));

//设置邮件头

mm.setFrom(new InternetAddress("[email protected]"));//发送的的人

mm.setRecipient(Message.RecipientType.TO, (new InternetAddress(

"[email protected]")));//发送到的人

mm.setSubject("祝自己快乐!!");//主题

//邮件体

MimeBodyPart mbp = new MimeBodyPart();

mbp.setContent("记住这个日子没有人给你庆祝只有个你自己!!",

"text/html;charset=gb2312");

mmp.addBodyPart(mbp);

mm.setContent(mmp);

mm.saveChanges();

/*

* 注意不能用一个MimeBodyPart 同时的添加文件和图像

*

* */


mm.writeTo(new FileOutputStream("D:\\3.eml"));

2.发送有图片的邮件

@Test

public void MimeImageMail() throws Exception {

//创建邮件

MimeMessage mm = new MimeMessage(Session.getInstance(new Properties()));

//设置邮件头

mm.setFrom(new InternetAddress("[email protected]"));//发送的的人

mm.setRecipient(Message.RecipientType.TO, (new InternetAddress(

"[email protected]")));//发送到的人

mm.setSubject("祝自己快乐!!");//主题

//邮件体

MimeBodyPart mbp = new MimeBodyPart();

mbp.setContent("记住这个日子没有人给你庆祝只有个你自己!!<img src='cid:m.jpg' >",

"text/html;charset=gb2312");

//添加图片

MimeBodyPart mBp = new MimeBodyPart();

mBp.setDataHandler(new DataHandler(new FileDataSource("src\\m.jpg")));

mBp.setContentID("m.jpg");

MimeMultipart mmp = new MimeMultipart();

mmp.setSubType("related");// 设置为附件(mixed) 还是图片(related) 默认时为附件

mmp.addBodyPart(mbp);

mmp.addBodyPart(mBp);

mm.setContent(mmp);

mm.saveChanges();

/*

* 注意不能用一个MimeBodyPart 同时的添加文件和图像

*

* */


mm.writeTo(new FileOutputStream("D:\\3.eml"));

}

3.发送带附件和图片的邮件


import java.io.BufferedReader;

import java.io.FileOutputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.Socket;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Message;

import javax.mail.Session;

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 void MimeAccth() throws Exception {

//创建邮件

MimeMessage mm = new MimeMessage(Session.getInstance(new Properties()));

//设置邮件头

mm.setFrom(new InternetAddress("[email protected]"));//发送的的人

mm.setRecipient(Message.RecipientType.TO, (new InternetAddress(

"[email protected]")));//发送到的人

mm.setSubject("祝自己快乐!!");//主题

//邮件内容

MimeBodyPart mbp = new MimeBodyPart();

mbp.setContent("记住这个日子没有人给你庆祝只有个你自己!!<img src='cid:m.jpg' >",

"text/html;charset=gb2312");

//添加图片

MimeBodyPart mBpI= new MimeBodyPart();

mBpI.setDataHandler(new DataHandler(new FileDataSource("src\\m.jpg")));

mBpI.setContentID("m.jpg");

//添加附件

MimeBodyPart mBpF = new MimeBodyPart();

DataHandler dh=new DataHandler(new FileDataSource("src\\海阔天空.mp3"));

mBpF.setDataHandler(dh);

String fileName=dh.getName();

mBpF.setFileName(MimeUtility.encodeText(fileName));

MimeMultipart mmp = new MimeMultipart();

mmp.addBodyPart(mbp);

mmp.addBodyPart(mBpI);

mmp.setSubType("related");//设置为图片

MimeBodyPart part=new MimeBodyPart();

part.setContent(mmp);

MimeMultipart mmp2 = new MimeMultipart();

mmp2.addBodyPart(part);

mmp2.addBodyPart(mBpF);

mmp2.setSubType("mixed");

mm.setContent(mmp2);

mm.saveChanges();

/*

* 1、注意不能用一个MimeBodyPart 同时的添加文件和图像

* 2、添加附件和图片是只用用一个MimeMultipart添加并分别设置其属性

* 3、默认设置为附件

* */


mm.writeTo(new FileOutputStream("D:\\7.eml"));

}


}

你可能感兴趣的:(java,Web,算法,socket,OS)