這個程序沒有使用JavaMail API
本文分兩部分
一
什麼是 SMTP
SMTP (Simple Mail Transfer Protocol) : 電子郵件從客戶機傳輸到服務器或從某一個服務器傳輸到另一個服務器使用的傳輸協議
什麼是 ESMTP
ESMTP (Extended SMTP)
SMTP 命令包括
HELO 向服務器標識用戶身份
EHLO 向服務器標識用戶身份
MAIL FROM 命令中指定的地址是發件人地址
RCPT TO 標識單個的郵件接收人
DATA 在單個或多個 RCPT 命令後
VRFY 用於驗證指定的用戶/郵箱是否存在
EXPN 驗證給定的郵箱列表是否存在
HELP 查詢服務器支持什麼命令
NOOP 無操作
RSET 重置會話
QUIT 結束會話
連接到 Postfix 使用 SMTP 命令發送郵件
例如
telnet
helo
ehlo
auth login
Y
MTk
(
發到本系統中域名下的賬戶可跳過身份認證
mail from: <>
rcpt to: <>
data
From:
To:
Date: Mon
Subject: test mail
Hi
This is a test mail
quit
Connection closed by foreign host
以上就是一個郵件發送的基本的命令
再說一下郵件發送的基本過程
如果你的郵件地址是
二
MailMessage
//這個類其實就是一個基本的JavaBean
package mail;
public class MailMessage {
private String from;
private String to;
private String datafrom;
private String datato;
private String subject;
private String content;
private String date;
private String user;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this
}
public String getUser() {
return user;
}
public void setUser(String user) {
this
}
public String getContent() {
return content;
}
public void setContent(String content) {
ntent = content;
}
public String getDatafrom() {
return datafrom;
}
public void setDatafrom(String datafrom) {
this
}
public String getDatato() {
return datato;
}
public void setDatato(String datato) {
this
}
public String getDate() {
return date;
}
public void setDate(String date) {
this
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this
}
public String getTo() {
return to;
}
public void setTo(String to) {
this
}
}
SMTPClient
//主要的功能就在這裡面完成了
package mail;
import Java
import Java
import Java
import Java
import Java
import
import
import
import Java
import sun
public class SMTPClient {
private boolean debug=true;
BASE
public static void main(String[] args) throws UnknownHostException
// TODO Auto
MailMessage message=new MailMessage();
message
message
String server=
message
message
message
message
message
message
SMTPClient smtp=new SMTPClient(server
boolean flag;
flag=smtp
if(flag){
System
}
else{
System
}
}
private Socket socket;
public SMTPClient(String server
try{
socket=new Socket(server
}catch(SocketException e){
System
}catch(Exception e){
e
}finally{
System
}
}
//注冊到郵件服務器
public void helo(String server
int result;
result=getResult(in);
//連接上郵件服務後
if(result!=
throw new IOException(
}
result=sendServer(
//HELO命令成功後返回
if(result!=
{
throw new IOException(
}
}
private int sendServer(String str
out
out
out
if(debug)
{
System
}
return getResult(in);
}
public int getResult(BufferedReader in){
String line=
try{
line=in
if(debug){
System
}
}catch(Exception e){
e
}
//從服務器返回消息中讀出狀態碼
StringTokenizer st=new StringTokenizer(line
return Integer
}
public void authLogin(MailMessage message
int result;
result=sendServer(
if(result!=
throw new IOException(
}
result=sendServer(encode
if(result!=
throw new IOException(
}
result=sendServer(encode
if(result!=
throw new IOException(
}
}
//開始發送消息
public void mailfrom(String source
int result;
result=sendServer(
if(result!=
throw new IOException(
}
}
// 設置郵件收件人
public void rcpt(String touchman
int result;
result=sendServer(
if(result!=
throw new IOException(
}
}
//郵件體
public void data(String from
int result;
result=sendServer(
//輸入DATA回車後
if(result!=
throw new IOException(
}
out
out
out
out
out
out
out
out
out
//句號加回車結束郵件內容輸入
result=sendServer(
System
if(result!=
{
throw new IOException(
}
}
//退出
public void quit(BufferedReader in
int result;
result=sendServer(
if(result!=
throw new IOException(
}
}
//發送郵件主程序
public boolean sendMail(MailMessage message
try{
BufferedReader in=new BufferedReader(new InputStreamReader(socket
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(socket
helo(server
authLogin(message
mailfrom(message
rcpt(message
data(message
quit(in
}catch(Exception e){
e
return false;
}
return true;
}
}
因為現在一般SMTP服務器都需要SMTP驗證
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26183.html