分享
 
 
 

从Java应用程序中发送E-mail

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Java作为一种网络编程语言,具有强大的网络编程功能,可以用仅仅几条语句完成其他语言需要的几十条甚至上百条语句所能完成的功能。这里,我试着用Java编写了一个可以用来发送E-mail的程序,很简单,仅仅作为示例。

首先,需要了解一下SMTP协议(简单邮件传输协议),是定义邮件传输的协议,它是基于TCP服务的应用层协议,由RFC0821所定义。SMPT协议规定的命令是以明文方式进行的。下表说明了SMTP服务器发送电子邮件所需的步骤。

SMTP协议

协议 描述

HELO本地主机名 启动与SMTP服务器的通信

MAIL FROM:用户@电子邮件地址.com 指定谁正在发送电子邮件

用户@电子邮件地址.com 指定谁将接收电子邮件

DATA 指定电子邮件的数据是下一个

(你的电子邮件信息) 指定电子邮件的信息(任意行)

一个点指定电子邮件的结束

QUIT 正常关闭连接

这就是一个简单的发送邮件的会话过程,其实当使用Outlook eXPress等客户软件发送时,后台进行的交互也是这样的,当然,SMTP协议为了处理复杂的邮件发送情况如附件等等,定义了很多的命令及规定,具体可以通过阅读RFC821来获得。

当你的一个朋友向你发送邮件时,他的邮件服务器和你的邮件服务器通过SMTP协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设你的本地邮件服务器是Linux系统),若你通过telnet协议直接登录到邮件服务器上,则可以使用mail等客户软件直接阅读邮件,但是若你希望使用本地的MUA(Mail User Agent,如outlook express等客户软件)来阅读邮件,则本地客户端通过POP3或IMAP协议与邮件服务器交互,将邮件信息传递到客户端(如:win98系统)。而假如你向你的朋友回复一封信件时,你所使用的MUA也是通过SMTP协议与邮件服务(一般为发送邮件地址对应的email地址)器通信,指示其希望邮件服务器帮助转发一封邮件到你朋友的邮件地址指定的邮件服务器中。若本地邮件服务器答应你通过它转发邮件,则服务器通过SMTP协议发送邮件到对方的邮件服务器。这就是接受和发送邮件的全部过程。

了解了电子邮件的发送过程,我们就可以利用Java的强大功能来实现这一过程了,下面这个程序SendMail.java演示了如何在应用程序中发送电子邮件。

import java.io.*

import java.net.*

public class SendMail

{static PrintStream ps=null; //发送信息

static DatainputStream dis=null; //接受信息

public static void send(String str) throws IOException

{ps.println(str); //发送串

ps.flush(); //刷新该串

System.out.println("Java sent: "+str);

}

public static void receive() throws IOException

{ String readstr=dis.readLine(); //得到smtp响应

System.out.println("SMTP response: "+readste);

}

public static void main (String args[])

{String HELO="HELO";

String MAIL_FROM="MAIL_FROM:user@user.com";

String RCPT_TO="RCPT_TO: user@user.com";

String SUBJECT="SUBJECT:Java is cool!";

String DATA="DATA"; //消息的开始

String BODY="Java send this!\r\n.\r\n";

//注重:"\r\n.\r\n" 标志该信息结束

Socket smtp=null; //smtp套接字

try{smtp=new Socket("smtp.any.com",25);

//注重:25是smtp的默认端口号

OutputStream os= smtp.getOutputStream();

ps=new PrintStream(os);

InputStream is= smtp.getIntputStream();

dis=new DataInputStream(is)

}

catch(IOException e)

{System.out.println("error");

}

try{//告诉smtp已预备好

String loc=InetAddress.getLocalHost().getHostname();

send(HELO+loc);

receive(); //得到smtp响应

send(MAIL_FROM); //从地址发出

receive(); //得到smtp响应

send(RECP_TO); //发送smtp给谁

receive(); //得到smtp响应

send(DATA); //发送smtp开始

receive(); //得到smtp响应

send(SUBJECT); //发送smtp标题

receive(); //得到smtp响应

send(BODY); //发信息主体

receive(); //得到smtp响应

smtp.close(); //关闭连接

}

catch(IOException e)

{ System.out.println("error");

}

System.out.println("Mail Sent!");

}

}

你应该注重到,电子邮件消息的数据部分有两段:头部和主体。在头部,你可以制定有关这条消息的附加信息。在前面这个示例中,程序设置了这条消息的主题。为了运行上述代码,必须改变SMTP域名,以及发送者和接收者的E-mail地址。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有