该博客偏于实战,以代码为主。不过笔者加了许多注释,方便阅读。
好了说说该博客内容。该博客主要是JAVA实现SMTP发送邮件,主要做到以下几点
1、打开talent客户端
2、掌握在cmd下邮件的发送
3、发送者邮箱开启客户端授权码
4、掌握Base64编码
5、当然还有你会敲代码的双手^_^
一、掌握在cmd下实现邮件发送
1、首先你的开启Telnet客户端(控制面板/程序/打开或关闭windows功能/选择Telnet客户端)
- 这个可能会遇到一系列问题,百度都有许多解决办法
2、掌握cmd下邮件发送过程
telnet smtp.163.com 25
220
helo myxulinjie
250 ok
auth login
334 dXNlcm5hbWU6
***(这里输入发送者邮箱的Base64码)
334 UGFzc3dvcmQ6
***(这里输入发送者授权码的密码,注意不是邮箱密码)
235 Authentication successful
mail from: <发送者邮箱@163.com>
250 Mail Ok
rcpt to: <接收者邮箱@163.com>
250 Mail Ok
data
354 End data with <CR><LF>.<CR><LF>
to: 接收者邮箱@163.com
from: 发送者邮箱@163.com
subject:test telnet smtp mail
what is your name?
.
250 Mail OK.........
rset
250 OK
quit
221 Bye
二、发送者邮箱开启客户端授权码
这里以163为例
三、JAVA实现SMTP发送邮件
基于CC的Base64编解码工具类
package Base64Demo;
import org.apache.commons.codec.binary.Base64;
/*
*基于commons-codec-1.11
*/
public class Base64Utile_cc {
/*
*加密过程
*/
public static String EncodeBase64(byte[] data)
{
Base64 en=new Base64();
String str=en.encodeBase64String(data);
return str;
}
/*
*解密过程
*/
public static String DecodeBase64(String str) {
Base64 de=new Base64();
byte[] ResultBase=de.decodeBase64(str);
String str2=new String(ResultBase);
return str2;
}
}
实现SMTP发送邮件类
package Base64Demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class SMTPDEMO {
public static void main(String[] args) {
/*
*用户名和密码
*/
String SendUser="ash_ali@163.com";
String SendPassword="xlj932834897";
String ReceiveUser="ash_ali01@163.com";
/*
*对用户名和密码进行Base64编码
*/
String UserBase64=Base64Utile_cc.EncodeBase64(SendUser.getBytes());
String PasswordBase64=Base64Utile_cc.EncodeBase64(SendPassword.getBytes());
try {
/*
*远程连接smtp.163.com服务器的25号端口
*并定义输入流和输出流(输入流读取服务器返回的信息、输出流向服务器发送相应的信息)
*/
Socket socket=new Socket("smtp.163.com", 25);
InputStream inputStream=socket.getInputStream();//读取服务器返回信息的流
InputStreamReader isr=new InputStreamReader(inputStream);//字节解码为字符
BufferedReader br=new BufferedReader(isr);//字符缓冲
OutputStream outputStream=socket.getOutputStream();//向服务器发送相应信息
PrintWriter pw=new PrintWriter(outputStream, true);//true代表自带flush
System.out.println(br.readLine());
/*
*向服务器发送信息以及返回其相应结果
*/
//helo
pw.println("helo myxulinjie");
System.out.println(br.readLine());
//auth login
pw.println("auth login");
System.out.println(br.readLine());
pw.println(UserBase64);
System.out.println(br.readLine());
pw.println(PasswordBase64);
System.out.println(br.readLine());
//Set "mail from" and "rect to"
pw.println("mail from:<"+SendUser+">");
System.out.println(br.readLine());
pw.println("rcpt to:<"+ReceiveUser+">");
System.out.println(br.readLine());
//Set "data"
pw.println("data");
System.out.println(br.readLine());
//正文主体(包括标题,发送方,接收方,内容,点)
pw.println("subject:myxulinjie");
pw.println("from:"+SendUser);
pw.println("to:"+ReceiveUser);
pw.println("Content-Type: text/plain;charset=\"gb2312\"");//设置编码格式可发送中文内容
pw.println();
pw.println("大家好,欢迎来到林杰的专栏");
pw.println(".");
pw.print("");
System.out.println(br.readLine());
/*
*发送完毕,中断与服务器连接
*/
pw.println("rset");
System.out.println(br.readLine());
pw.println("quit");
System.out.println(br.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
成功收到邮件。该实现也是基于了解Base64编码基础上,如果对Base64不是很熟悉的小伙伴可以转战以下这篇博客了解以下哦
http://blog.csdn.net/w_linux/article/details/79307024