📄 sendmail.java
字号:
/*
这个类主要是以Telnet的方式发送命令和邮件
*/
import java.io.*;
import sun.misc.BASE64Encoder;
import java.net.*;
import java.util.*;
public class SendMail{
private Socket mailSocket;
private BufferedReader recv;
private DataOutputStream send;
private String from;
private String to;
private String domainFrom;
private String domainTo;
private String data;
private String subject;
private String userFrom;
private String userTo;
private String servername;
//解析发件人的Email地址
public void setFrom(String mailFrom)
{
from=mailFrom;
int i=from.indexOf("@");
userFrom=from.substring(0,i-1);
domainFrom=from.substring(i+1,from.length());
}
public String getFrom(){
return userFrom;
}
//解析收件人的Email地址
public void setTo(String mailFrom)
{
to=mailFrom;
int i=from.indexOf("@");
userTo=from.substring(0,i-1);
domainTo=from.substring(i+1,from.length());
}
//获得邮件服务器域名
public String getservername()
{
servername="smtp."+domainFrom;
return servername;
}
//把邮件的内容传给data
public void setData(String data)
{
this.data=data;
}
//把邮件的主题传给subject
public void setSubject(String subject)
{
this.subject=subject;
}
//创建一个套接字和两个连接到套接字的流对象
public int createSocket(String serverName, int port){
try{
mailSocket = new Socket(serverName, port);
recv = new BufferedReader(new InputStreamReader(mailSocket.getInputStream()));
send = new DataOutputStream(mailSocket.getOutputStream());
String s1 = recv.readLine();
char c = s1.charAt(0);
if((c == '4') | (c == '5'))
return 0;
}
catch(Exception e){
return 0;
}
return 1;
}
//使用telnet登录方式传送邮件
public int transmit(String loginName, String loginPassword){
try{
//发送HELO 命令
/*
if(domainFrom.length() != 0){
if(sendString("HELO " + domainFrom +"\r\n")!= 1)
return 0;
}
*/
//发送EHLO命令
if(domainFrom.length() != 0){
if(sendString("EHLO "+ domainFrom+"\r\n")!= 1)
return 0;
}
//发送auth login命令
if(sendString("auth login"+"\r\n") != 1)
return 0;
if(sendString(getBase64(loginName)+"\r\n") != 1)
return 0;
if(sendString(getBase64(loginPassword)+"\r\n")!= 1)
return 0;
//发送MAIL FROM 命令(发件人)
if(from.length() != 0){
if(sendString("MAIL FROM:<"+from+">\r\n")!= 1)
return 0;
}
//发送RCPT TO 命令(收件人)
if(to.length() != 0){
if(sendString("RCPT TO:<"+to+">\r\n") != 1)
return 0;
}
//发送邮件正文(DATA 命令)
if(sendString("DATA"+"\r\n") != 1)
return 0;
send.writeBytes("From:"+from+"\r\n"); // 开
send.writeBytes("To: "+to+"\r\n"); // 始
send.writeBytes("Subject: "+subject+"\r\n"); // 邮
send.writeBytes("mime-version: 1.0\r\n"); // 件
send.writeBytes("Content-Type: text/html;\r\n"); // 发
send.writeBytes("Content-Transfer-Encoding: Base64"); // 送
send.writeBytes("\r\n\r\n"); //
send.writeBytes(getBase64(data)); //
send.writeBytes("\r\n\r\n"); //
if(sendString("\r\n.\r\n") != 1)
return 0;
else System.out.println("邮件成功发送");
}
catch(Exception e){
System.out.println("There is an exception.");
}
return 1;
}
//发送telnet命令并接收返回命令
private int sendString(String s){
String s1 = "";
try{
send.writeBytes(s);
s1 = recv.readLine();
}
catch(Exception e){
System.out.print("There is an exception");
return 0;
}
if(s1.length()==0) return 0;
char c = s1.charAt(0);
return !((c == '4') | (c == '5')) ? 1 : 0;
}
//生成Base64编码
private String getBase64(String str)
{
return (new BASE64Encoder().encode(str.getBytes()));
}
//退出TCP连接并关闭两个流和套接字
public int close(){
int i = 0;
try{
send.writeBytes("QUIT");
send.close();
recv.close();
mailSocket.close();
}
catch(Exception e){
return 0;
}
return i == 0 ? 1 : 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -