📄 mail.java
字号:
// SMTP 偵傛傞儊乕儖憲怣僾儘僌儔儉Mail.java
// 偙偺僾儘僌儔儉偼,巜掕偝傟偨儊乕儖僒乕僶偵懳偟偰儊僢僙乕僕傪憲怣偟傑偡
// 巊偄曽java Mail [-s subject] 憲怣憡庤偺傾僪儗僗
// 巊梡忋偺拲堄
// subject偼嬻敀側偟偺堦岅偲偟偰偔偩偝偄
// 憲怣憡庤偺傾僪儗僗偼暋悢巜掕偱偒傑偡
// 婲摦偺椺java Mail -s Hello odaka@kiku.fuis.fukui-u.ac.jp
// 婲摦屻,憲怣傪埶棅偡傞儊乕儖僒乕僶偺傾僪儗僗偲,憲怣幰偺傾僪儗僗傪暦偄偰偒傑偡
// 偦傟偧傟,傾僪儗僗傪摎偊偰偔偩偝偄
// 傾僪儗僗妋擣偺椺
// 儊乕儖僒乕僶偺傾僪儗僗傪擖椡偟偰偔偩偝偄
// kiku.fuis.fukui-u.ac.jp
// 偁側偨偺儊乕儖傾僪儗僗傪擖椡偟偰偔偩偝偄
// odaka@take.fuis.fukui-u.ac.jp
// 儊乕儖僒乕僶偺傾僪儗僗丗kiku.fuis.fukui-u.ac.jp
// 偁側偨偺儊乕儖傾僪儗僗丗odaka@take.fuis.fukui-u.ac.jp
// 埲忋偱傛傠偟偄偱偡偐丠(y/n)
// 儔僀僽儔儕偺棙梡
import java.net.*;
import java.io.*;
import java.util.*;
// Mail僋儔僗
// Mail僋儔僗偼,Mail 僾儘僌儔儉偺杮懱偱偡
public class Mail {
final int SMTP_PORT = 25;// SMTP 愙懕梡億乕僩斣崋(25 斣)
String smtp_server = ""; // 憲怣梡僒乕僶
String my_email_addr = "" ; // 帺暘偺儊乕儖傾僪儗僗
//sendCommandAndResultCheck儊僜僢僪
//SMTP 僐儅儞僪傪僒乕僶偵憲怣偟,曉摎僐乕僪偺妋擣傪峴偄傑偡
public void sendCommandAndResultCheck(Socket smtp,
BufferedReader smtp_in,
PrintWriter smtp_out,
String command,
int success_code)
throws IOException
{
smtp_out.print(command + "\r\n");//僐儅儞僪偺憲怣
smtp_out.flush();
System.out.println("send> " + command);//憲怣撪梕偺昞帵
resultCheck(smtp, smtp_in, smtp_out, success_code);
//寢壥偺僠僃僢僋
}
// resultCheck儊僜僢僪
// 曉摎僐乕僪傪僠僃僢僋偟偰,僄儔乕側傜偽僐僱僋僔儑儞傪暵偠傑偡
public void resultCheck(Socket smtp, BufferedReader smtp_in,
PrintWriter smtp_out,
int success_code)
throws IOException
{
String res = smtp_in.readLine();//曉摎僐乕僪偺撉傒庢傝
System.out.println("recv> " + res);
// 傕偟曉摎僐乕僪偑婜懸偝傟傞僐乕僪(success_code)偱側偗傟偽丒丒丒
if (Integer.parseInt(res.substring(0,3)) != success_code){
smtp.close();// 僐僱僋僔儑儞傪暵偠傑偡
throw new RuntimeException(res);
}
}
// send儊僜僢僪
// SMTP 偺僙僢僔儑儞傪恑傔傑偡
public void send(String subject, String[] to,String[] msgs)
throws IOException
{
// CONNECT
Socket smtp = new Socket(smtp_server, SMTP_PORT);
BufferedReader smtp_in = new BufferedReader(
new InputStreamReader(smtp.getInputStream()));
PrintWriter smtp_out = new PrintWriter(
smtp.getOutputStream());
resultCheck(smtp, smtp_in, smtp_out, 220);
// HELO僐儅儞僪偺憲晅
String myname = InetAddress.getLocalHost().getHostName();
sendCommandAndResultCheck(smtp, smtp_in, smtp_out,
"HELO " + myname, 250);
// MAIL FROM僐儅儞僪偺憲晅
sendCommandAndResultCheck(smtp, smtp_in, smtp_out,
"MAIL FROM:" + my_email_addr, 250);
// RCPT TO僐儅儞僪偺憲晅
for (int i = 0; i < to.length; i++){
sendCommandAndResultCheck(smtp, smtp_in, smtp_out,
"RCPT TO:" + to[i], 250);
}
// DATA僐儅儞僪偵傛傞儊乕儖偺憲晅
sendCommandAndResultCheck(smtp, smtp_in, smtp_out,
"DATA", 354);
//Subject僿僢僟偺憲晅
smtp_out.print("Subject:" + subject + "\r\n");
System.out.println("send> " + "Subject:" + subject) ;
smtp_out.print("\r\n");
//儊僢僙乕僕奺峴偺憲晅
for(int i = 0;i < msgs.length - 1;++i) {
smtp_out.print(msgs[i]+"\r\n");
System.out.println("send> " + msgs[i]) ;
}
sendCommandAndResultCheck(smtp, smtp_in, smtp_out,
"\r\n.", 250);
// QUIT僐儅儞僪偺憲晅
sendCommandAndResultCheck(smtp, smtp_in, smtp_out,
"QUIT", 221);
// 僐僱僋僔儑儞偺僋儘乕僘
smtp.close();
}
// setAddress儊僜僢僪
// 憲怣偵棙梡偡傞儊乕儖僒乕僶傗棙梡幰偺儊乕儖傾僪儗僗傪僙僢僩偟傑偡
public void setAddress(){
String buf = "" ;
BufferedReader lineread
= new BufferedReader(new InputStreamReader(System.in)) ;
boolean cont = true ;
try{
while(cont){ //傾僪儗僗擖椡偺儖乕僾
System.out.println("儊乕儖僒乕僶偺傾僪儗僗傪擖椡偟偰偔偩偝偄") ;
smtp_server = lineread.readLine() ;
System.out.println("偁側偨偺儊乕儖傾僪儗僗傪擖椡偟偰偔偩偝偄") ;
my_email_addr = lineread.readLine() ;
System.out.println(
" 儊乕儖僒乕僶偺傾僪儗僗丗" + smtp_server) ;
System.out.println(
" 偁側偨偺儊乕儖傾僪儗僗丗" + my_email_addr) ;
System.out.println("埲忋偱傛傠偟偄偱偡偐丠(y/n)") ;
buf = lineread.readLine() ;
if("y".equals(buf)) cont = false ;
}
}catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
// setMsgs儊僜僢僪
// 憲怣儊僢僙乕僕傪庢傝崬傒傑偡
public String[] setMsgs(){
String buf = "" ;
BufferedReader lineread
= new BufferedReader(new InputStreamReader(System.in)) ;
boolean cont = true ;
Vector msgs_list = new Vector();
String[] msgs = null ;
try{
System.out.println("憲怣偟偨偄儊僢僙乕僕傪擖椡偟偰偔偩偝偄") ;
System.out.println(" (僺儕僆僪偱廔椆)") ;
while(cont){ // 儊僢僙乕僕偺擖椡
buf = lineread.readLine() ;
msgs_list.addElement(buf);
if(".".equals(buf)) cont = false ;
}
msgs = new String[msgs_list.size()];
msgs_list.copyInto(msgs);
}catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
return(msgs) ;
}
// mainproc儊僜僢僪
// 堷悢偺張棟側偳傪峴偄傑偡
public void mainproc(String[] args){
String usage =
"java Mail [-s subject] to-addr ...";
String subject = "";
Vector to_list = new Vector();
// 僒僽僕僃僋僩傗偁偰愭偺張棟
for (int i = 0; i < args.length; i++){
if ("-s".equals(args[i])){
i++;
subject = args[i];
}else{
to_list.addElement(args[i]);
}
}
// 擖椡偝傟偨堷悢偺暥帤楍傊曄姺
if (to_list.size() > 0){
try {
String[] to = new String[to_list.size()];
to_list.copyInto(to);
setAddress() ;
String[] msgs = setMsgs() ;
send(subject, to,msgs);
}catch(IOException e){
e.printStackTrace();
}
}else{
System.out.println("usage: " + usage);
}
}
// main儊僜僢僪
// Mail 僋儔僗偺僆僽僕僃僋僩傪惗惉偟傑偡
public static void main(String[] args){
Mail m = new Mail() ;
m.mainproc(args) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -