E-Mail协议简介:
- 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。
- 发送邮件的服务器使用发送协议,现在常用的是SMTP协议。所以,通常发邮件的服务器也称为SMTP服务器。
- 接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器。
- 目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。
- 当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。默认发邮件服务器的端口为25,收邮件的端口为110.
邮件收/发协议:
- SMTP协议-发邮件协议
全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。端口一般为25.
- POP3协议-收邮件协议
全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。端口一般为110.
- IMAP协议-对POP3的扩展
全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。
SMTP发邮件协议的命令
POP3协议的命令
DOS下演示收发邮件
注意在邮箱服务器(进网站邮箱)中要把SMTP和POP3服务的开关打开
邮箱:
hncujava@sina.com 1234567
hncujava@126.com hncu1234567
编码
package cn.hncu;
import sun.misc.BASE64Encoder;
public class BaseEncoder {
public static void main(String[] args) {
BASE64Encoder be=new BASE64Encoder();
String name=be.encode("hncujava".getBytes());
String pwd=be.encode("1234567".getBytes());
System.out.println(name);
System.out.println(pwd);
}
}
※※win7系统中,默认下 telnet服务是关闭,得用如下方式:
1、控制面板-->程序-->打开或关闭windows功能,选择“telnet服务器” 和 “telnet客户端”,确定即可。
2、控制面板-->系统安全-->管理工具-->服务-->telnet-->右击“属性”-->将“禁用”改为“手动”,再选择“启动”
一、发邮件
telnet smtp.sina.com 25 第一步:与服务器建立连接。
ehlo hncu 第二步:先和服务器打个招乎
auth login 第三步:请求登录
aG5jdWphdmE= 输入用户名经过base64编码以后的
MTIzNDU2Nw== 输入密码,也是经过base64编码以后的。
mail from:<hncujava@sina.com> 第四步:输入发件人
rcpt to:<hncujava@126.com> 第五步:输入收件人
data 第六步:输入data命令然后回车,开始输入数据。
from:<hncujava@sina.com> 可选的输入from:<…>
to:<hncujava@126.com> 可选的输入to:<..>
subject:hncu mail wyjtest subject:主题
[空行]
hello hncu , iam OK?!
. //邮件结束符 第七步:输入.(点)单行,表示数据结束
第八步:输入quit退出。
二、收邮件
telnet pop3.126.com 110
user hncujava
pass hncu1234567
stat 显示总体信息。
list 列出所有信件
retr - 显示第一封信件
quit -退出
下面是演示java下操作发邮件
注意:QQ邮箱需要在设置中开启smtp和pop3协议,并且记住授权码。
比其他邮箱多了ssl协议,需要加上
//要加上SSL
MailSSLSocketFactory sf=new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
p.setProperty("mail.smtp.ssl.enable", "true");
p.put("mail.smtp.ssl.socketFactory", sf);
下面是发送代码
这里写代码片
package cn.hncu;
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.junit.Test;
import org.junit.Test;
import com.sun.mail.util.MailSSLSocketFactory;
public class SendMailDemo {
@Test
public void send1() throws AddressException, MessagingException, GeneralSecurityException{
Properties p=new Properties();
p.setProperty("mail.host", "smtp.sina.com");//指定邮件服务器,默认端口 25
p.setProperty("mail.smtp.auth", "true");//要采用指定用户名密码的方式去认证
// MailSSLSocketFactory sf=new MailSSLSocketFactory();
// sf.setTrustAllHosts(true);
// p.put("mail.smtp.ssl.enable", "true");
// p.put("mail.smtp.ssl.socketFactory", sf);
//
Session s=Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
PasswordAuthentication pa=new PasswordAuthentication("hncujava", "1234567");
return pa;
}
});//注册session,指定发送账号
s.setDebug(true);//设置打开调试状态,一一条条发送.
//声明一个Message对象(代表一封邮件),从session中创建
MimeMessage msg=new MimeMessage(s);
//邮件信息封装
//1发件人
msg.setFrom( new InternetAddress("hncujava@sina.com") );
//2收件人
msg.setRecipient(RecipientType.TO, new InternetAddress("hncujava@126.com"));
//33邮件内容:主题、内容
msg.setSubject("这是军街用java发邮件");
msg.setContent("<a href='http://www.3300av.com/'>这是军街的个人主页</a>","text/html;charset=utf-8");
// msg.setContent("今天天气很好啊","text/plain;charset=utf-8");
//发送动作
Transport.send(msg);
}
@Test//发送带附件的邮件
public void send2() throws MessagingException{
//跟smtp服务器建立一个连接
Properties p=new Properties();
p.setProperty("mail.host", "smtp.sina.com");
p.setProperty("mail.smtp.auth", "true");
Session s=Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
PasswordAuthentication pa=new PasswordAuthentication("hncujava", "1234567");
return pa;
}
});
s.setDebug(true);
MimeMessage msg=new MimeMessage(s);
//声明一个Message对象(代表一封邮件),从session中创建
msg.setFrom(new InternetAddress("hncujava@sina.com"));
InternetAddress[] ia= new InternetAddress[2];
ia[0]=new InternetAddress("hncujava@126.com");
ia[1]=new InternetAddress("747205398@qq.com");
msg.setRecipients(javax.mail.Message.RecipientType.TO, ia );
msg.setSubject("这是我用Java发来的邮件5....");
msg.setSubject("这是军街用来测试邮件附件");
MimeBodyPart body1=new MimeBodyPart();
body1.setContent("这是两张<font color='red'>美女图片</font>....","text/html;charset=utf-8");
//邮件内容部分2---附件1
MimeBodyPart body2=new MimeBodyPart();
body2.setDataHandler(new DataHandler(new FileDataSource("./imgs/1.png")));
body2.setFileName("1.jpg");
// 2-1606200U946.doc
//邮件内容部分3---附件2
MimeBodyPart body3=new MimeBodyPart();
body3.setDataHandler(new DataHandler(new FileDataSource("./imgs/2-1606200U946.doc")));
body3.setFileName("2-1606200U946.doc");
//把上面的3部分组装在一起,设置到msg中
MimeMultipart mm=new MimeMultipart();
mm.addBodyPart(body1);
mm.addBodyPart(body2);
mm.addBodyPart(body3);
msg.setContent(mm);
Transport.send(msg);
}
@Test
public void my() throws AddressException, MessagingException, GeneralSecurityException{
for (int i = 0; i < 50; i++) {
Properties p=new Properties();
p.setProperty("mail.host", "smtp.qq.com");//指定邮件服务器,默认端口 25
p.setProperty("mail.smtp.auth", "true");//要采用指定用户名密码的方式去认证
//要加上SSL
MailSSLSocketFactory sf=new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
p.setProperty("mail.smtp.ssl.enable", "true");
p.put("mail.smtp.ssl.socketFactory", sf);
Session s = Session.getDefaultInstance(p, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
PasswordAuthentication pa = new PasswordAuthentication(
"747205398", "************");//***为你的qq邮箱登陆授权码
return pa;
}
});//注册session,指定发送账号
s.setDebug(true);//设置打开调试状态,一一条条发送.
//声明一个Message对象(代表一封邮件),从session中创建
MimeMessage msg = new MimeMessage(s);
//邮件信息封装
//1发件人
msg.setFrom(new InternetAddress("747205398@qq.com"));
//2收件人
msg.setRecipient(RecipientType.TO, new InternetAddress(
"782458789@qq.com"));
//33邮件内容:主题、内容
msg.setSubject("狗屎,我给你发给黄色网址,不要写");
msg.setContent("<a href='http://www.3300av.com/'>你看看</a>",
"text/html;charset=utf-8");
// msg.setContent("今天天气很好啊","text/plain;charset=utf-8");
//发送动作
Transport.send(msg);
}
}
}