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"));
}
}