java发邮件Java怎么直接发送邮件,而不通过页面或者outlook软件.
java发邮件 时间:2021-09-04 阅读:(
)
怎样用java实现邮件的发送?
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import .Socket;
import .SocketException;
import java.rmi.UnknownHostException;
import java.util.StringTokenizer;
import sun.misc.BASE64Encoder;
public class Sender {
//private boolean debug = true;
BASE64Encoder encode=new BASE64Encoder();//用于加密后发送用户名和密码
static int dk=25;
private Socket socket;
public Sender(String server, int port) throws UnknownHostException,
IOException {
try {
socket = new Socket(server, dk);
} catch (SocketException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
//System.out.println("已经建立连接!");
}
}
// 注册到邮件服务器
public void helo(String server, BufferedReader in, BufferedWriter out)
throws IOException {
int result;
result = getResult(in);
// 连接上邮件服务后,服务器给出220应答
if (result != 220) {
throw new IOException("连接服务器失败");
}
result = sendServer("HELO " + server, in, out);
// HELO命令成功后返回250
if (result != 250) {
throw new IOException("注册邮件服务器失败!");
}
}
private int sendServer(String str, BufferedReader in, BufferedWriter out)
throws IOException {
out.write(str);
out.newLine();
out.flush();
/*
if (debug) {
System.out.println("已发送命令:" + str);
}
*/
return getResult(in);
}
public int getResult(BufferedReader in) {
String line = "";
try {
line = in.readLine();
/*
if (debug) {
System.out.println("服务器返回状态:" + line);
}
*/
} catch (Exception e) {
e.printStackTrace();
}
// 从服务器返回消息中读出状态码,将其转换成整数返回
StringTokenizer st = new StringTokenizer(line, " ");
return Integer.parseInt(st.nextToken());
}
public void authLogin(MailMessage message, BufferedReader in,
BufferedWriter out) throws IOException {
int result;
result = sendServer("AUTH LOGIN", in, out);
if (result != 334) {
throw new IOException("用户验证失败!");
}
result=sendServer(encode.encode(message.getUser().getBytes()),in,out);
//System.out.println("用户名: "+encode.encode(message.getUser().getBytes()));
if (result != 334) {
throw new IOException("用户名错误!");
}
result=sendServer(encode.encode(message.getPassword().getBytes()),in,out);
//result=sendServer(message.getPassword(),in,out);
//System.out.println("密码: "+encode.encode(message.getPassword().getBytes()));
if (result != 235) {
throw new IOException("验证失败!");
}
}
// 开始发送消息,邮件源地址
public void mailfrom(String source, BufferedReader in, BufferedWriter out)
throws IOException {
int result;
result = sendServer("MAIL FROM:<" + source + ">", in, out);
if (result != 250) {
throw new IOException("指定源地址错误");
}
}
// 设置邮件收件人
public void rcpt(String touchman, BufferedReader in, BufferedWriter out)
throws IOException {
int result;
result = sendServer("RCPT TO:<" + touchman + ">", in, out);
if (result != 250) {
throw new IOException("指定目的地址错误!");
}
}
// 邮件体
public void data(String from, String to, String subject, String content,
BufferedReader in, BufferedWriter out) throws IOException {
int result;
result = sendServer("DATA", in, out);
// 输入DATA回车后,若收到354应答后,继续输入邮件内容
if (result != 354) {
throw new IOException("不能发送数据");
}
out.write("From: " + from);
out.newLine();
out.write("To: " + to);
out.newLine();
out.write("Subject: " + subject);
out.newLine();
out.newLine();
out.write(content);
out.newLine();
// 句号加回车结束邮件内容输入
result = sendServer(".", in, out);
//System.out.println(result);
if (result != 250) {
throw new IOException("发送数据错误");
}
}
// 退出
public void quit(BufferedReader in, BufferedWriter out) throws IOException {
int result;
result = sendServer("QUIT", in, out);
if (result != 221) {
throw new IOException("未能正确退出");
}
}
// 发送邮件主程序
public boolean sendMail(MailMessage message, String server) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
helo(server, in, out);// HELO命令
authLogin(message, in, out);// AUTH LOGIN命令
mailfrom(message.getFrom(), in, out);// MAIL FROM
rcpt(message.getTo(), in, out);// RCPT
data(message.getDatafrom(), message.getDatato(),
message.getSubject(), message.getContent(), in, out);// DATA
quit(in, out);// QUIT
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}
再写一个MailMessage.java,set/get方法即可。
怎么用java发送带附件的邮件代码详解
package?email;??
import?java.io.BufferedReader;???
import?java.io.File;??
import?java.io.FileInputStream;??
import?java.io.FileNotFoundException;??
import?java.io.IOException;??
import?java.io.InputStream;??
import?java.io.InputStreamReader;??
import?java.io.PrintWriter;??
import?java.io.UnsupportedEncodingException;??
import?.Socket;??
import?java.nio.charset.Charset;??
import?java.text.SimpleDateFormat;??
import?java.util.ArrayList;??
import?java.util.Date;??
import?java.util.HashMap;??
import?java.util.List;??
import?java.util.Map;??
import?sun.misc.BASE64Encoder;??
public?class?Mail?{??
private?static?final?String?LINE_END?=?"
";??
private?boolean?isDebug?=?true;??
private?boolean?isAllowReadSocketInfo?=?true;??
private?String?host;??
private?String?from;??
private?List?to;??
private?List;??
private?List?;??
private?String?subject;??
private?String?user;??
private?String?password;??
private?String?contentType;??
private?String?boundary;??
private?String?boundaryNextPart;??
private?String?contentTransferEncoding;??
private?String?charset;??
private?String?contentDisposition;??
private?String?content;??
private?String?simpleDatePattern;??
private?String?defaultAttachmentContentType;??
private?List?partSet;??
private?static?Map?contentTypeMap;??
static?{??
//?MIME?Media?Types??
contentTypeMap?=?new?HashMap();??
contentTypeMap.put("xls",?"application/vnd.ms-excel");??
contentTypeMap.put("xlsx",?"application/vnd.ms-excel");??
contentTypeMap.put("xlsm",?"application/vnd.ms-excel");??
contentTypeMap.put("xlsb",?"application/vnd.ms-excel");??
contentTypeMap.put("doc",?"application/msword");??
contentTypeMap.put("dot",?"application/msword");??
contentTypeMap.put("docx",?"application/msword");??
contentTypeMap.put("docm",?"application/msword");??
contentTypeMap.put("dotm",?"application/msword");??
}??
private?class?MailPart?extends?Mail?{??
public?MailPart()?{??
}??
}??
public?Mail()?{??
defaultAttachmentContentType?=?"application/octet-stream";??
simpleDatePattern?=?"yyyy-MM-dd?HH:mm:ss";??
boundary?=?"--=_NextPart_zlz_3907_"?+?System.currentTimeMillis();??
boundaryNextPart?=?"--"?+?boundary;??
contentTransferEncoding?=?"base64";??
contentType?=?"multipart/alternative";??
charset?=?Charset.defaultCharset().name();??
partSet?=?new?ArrayList();??
to?=?new?ArrayList();??
cc?=?new?ArrayList();??
?=?new?ArrayList();??
}??
private?String?getPartContentType(String?fileName)?{??
String?ret?=?null;??
if?(null?!=?fileName)?{??
int?flag?=?fileName.lastIndexOf(".");??
if?(0?<=?flag?&&?flag?=?0;?i--)?{??
Mail?attachment?=?partSet.get(i);??
String?attachmentContent?=?attachment.getContent();??
if?(null?!=?attachmentContent?&&?0??mailAddressList)?{??
StringBuilder?sbd?=?new?StringBuilder();??
if?(null?!=?mailAddressList)?{??
int?listSize?=?mailAddressList.size();??
for?(int?i?=?0;?i?");??
}??
}??
return?sbd.toString();??
}??
private?List?getrecipient()?{??
List?list?=?new?ArrayList();??
list.addAll(to);??
);??
list.addAll();??
return?list;??
}??
public?void?addAttachment(String?filePath)?{??
addAttachment(filePath,?null);??
}??
public?void?addTo(String?mailAddress)?{??
this.to.add(mailAddress);??
}??
public?void?addCc(String?mailAddress)?{??
.add(mailAddress);??
}??
public?void?(String?mailAddress)?{??
.add(mailAddress);??
}??
public?void?addAttachment(String?filePath,?String?charset)?{??
if?(null?!=?filePath?&&?filePath.length()?>?0)?{??
File?file?=?new?File(filePath);??
try?{??
addAttachment(file.getName(),?new?FileInputStream(file),??
charset);??
}?catch?(FileNotFoundException?e)?{??
System.out.println("错误:"?+?e.getMessage());??
System.exit(1);??
}??
}??
}如何把java程序运行结果发送到邮箱
可以选择使用log4j,它是一款开源的日志记录工具,提供发送日志邮件功能
Log4j发送日志邮件的作用:
项目错误信息能及时(实时)反映给项目维护人员以及相关负责人。
优点:
1.快速响应;
2.共同监督;
3.邮件正文直接显示了错误信息,拷贝信息比登陆服务器再查找要方便;
4.在日志信息继续写入文件的前提下,多了另外一种获取信息的渠道。
补充:Log4j可以实现输出到控制台,文件,回滚文件,发送日志邮件,数据库,自定义标签。
发送邮件的一个重要的类是SMTPAppender,之前用的是 log4j-1.2.8,在1.2.8的版本中,SMTPAppender没有SMTPPassword 和SMTPUsername 属性。
这两个属性分别是登录SMTP服务器发送认证的用户名和密码。
依赖的jar包:
log4j-1.2.15.jar(版本低于log4j-1.2.14.jar不支持SMTP认证)
mail.jar
activation.jar
在log4j.properties文件中配置:
### send error through email.
#log4j的邮件发送appender,如果有必要你可以写自己的appender
.SMTPAppender
#发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送
log4j.appender.MAIL.Threshold=ERROR
#缓存文件大小,日志达到10k时发送Email
log4j.appender.MAIL.BufferSize=10
#发送邮件的邮箱帐号
log4j.appender.MAIL.From=xxx@
#SMTP邮件发送服务器地址
log4j.appender.MAIL.SMTPHost=
#SMTP发送认证的帐号名
log4j.appender.MAIL.SMTPUsername=xxx@
#SMTP发送认证帐号的密码
log4j.appender.MAIL.SMTPPassword=xxx
#是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息
log4j.appender.MAIL.SMTPDebug=false
#邮件主题
log4j.appender.MAIL.Subject=Log4JErrorMessage
#发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔;
#如果需要发副本给某人,则加入下列行
#=xxx@xxx.xxx
log4j.appender.MAIL.To=xxx@
.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n
在java代码中,可是用logger.info("message");方法将message代表的消息发送到指定邮箱中Java怎么直接发送邮件,而不通过页面或者outlook软件.
1 必须编写邮件客户端程序,请使用javamail包
2 编写一个页面,触发一个事件,讲发送的内容传递给后台的邮件客户端程序,即可完成你的要求
3 你不会是要求我们替你写个程序吧???
祝你好运!
vpsdime怎么样?vpsdime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:vpsdime夏日促销活动,美国达拉斯vps,2G内存/2核/20gSSD/1T流量,$20/年,此次推出一款Wi...
VPSDime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:VPSDime夏季促销:美国达拉斯VPS/2G内存/2核/20gSSD/1T流量/$20/年,此次推出一款Windows VPS,依然是...
95idc是一家香港公司,主要产品香港GIA线路沙田CN2线路独服,美国CERA高防服务器,日本CN2直连服务器,即日起,购买香港/日本云主机,在今年3月份,95IDC推出来一款香港物理机/香港多ip站群服务器,BGP+CN2线路终身7折,月付350元起。不过今天,推荐一个价格更美的香港物理机,5个ip,BGP+CN2线路,月付299元起,有需要的,可以关注一下。95idc优惠码:优惠码:596J...
java发邮件为你推荐
连接池数据库连接池的原理是什么?fast路由器如何设置fast路由器用户名和密码体系文件ISO体系文件分级nvidia官方网站官网NVIDIA驱动和win10系统不兼容,怎么解决?图片修改工具推荐个好用的修改图片的工具站内搜索引擎搜索引擎工作原理与如何建立站内搜索摇一摇周边什么是微信摇一摇周边?主板说明书跪求联想 945GC V:2.2B主板说明书!淘宝推广网站谁有好的淘宝推广网站介绍下哦!或推广技巧!修复网络lspLSP修复是什么意思?
cn域名个人注册 免费申请网页 bbr 电影服务器 linode godaddy优惠码 softbank官网 新站长网 ibrs 京东商城双十一活动 可外链网盘 重庆双线服务器托管 免费网页申请 重庆联通服务器托管 美国十大啦 hosting 美国西雅图独立 shuangshiyi 硬防 dbank 更多