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("[email protected]") );
//2收件人
msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
//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("[email protected]"));
InternetAddress[] ia= new InternetAddress[2];
ia[0]=new InternetAddress("[email protected]");
ia[1]=new InternetAddress("[email protected]");
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("[email protected]"));
//2收件人
msg.setRecipient(RecipientType.TO, new InternetAddress(
"[email protected]"));
//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);
}
}
}