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 你不会是要求我们替你写个程序吧???
祝你好运!
提速啦 成立于2012年,作为互联网老兵我们一直为用户提供 稳定 高速 高质量的产品。成立至今一直深受用户的喜爱 荣获 “2021年赣州安全大赛第三名” “2020创新企业入围奖” 等殊荣。目前我司在美国拥有4.6万G总内存云服务器资源,香港拥有2.2万G总内存云服务器资源,阿里云香港机房拥有8000G总内存云服务器资源,国内多地区拥有1.6万G总内存云服务器资源,绝非1 2台宿主机的小商家可比。...
需要提前声明的是有网友反馈到,PacificRack 商家是不支持DD安装Windows系统的,他有安装后导致服务器被封的问题。确实有一些服务商是不允许的,我们尽可能的在服务商选择可以直接安装Windows系统套餐,毕竟DD安装的Win系统在使用上实际上也不够体验好。在前面有提到夏季促销的"PacificRack夏季促销PR-M系列和多IP站群VPS主机 年付低至19美元"有提到年付12美元的洛杉...
百纵科技湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营香港服务器,香港站群服务器,美国高防服务器,美国站群服务器,云服务器,母机租用托管!美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。美国原生IP支持大批量订货 合作 适用电商 亚马逊...
java发邮件为你推荐
模糊数学模糊数学模型有哪些东西网如何在网上购买东西?网络购物的发展网购如何促进经济的发展?网络购物的发展网络购物的发展对策sd卡座SD卡座有能满足CE认证的吗?暂停线程怎么让一个线程暂停官方网店官方旗舰店和旗舰店是什么意思,有什么区别?它们卖的都是正品行货吗?约束是什么意思爱不约束是什么意思gps简介GPS有哪些功能安全工程师待遇注册安全工程师待遇怎样?
长春域名注册 江西服务器租用 美国和欧洲vps 淘宝二级域名 唯品秀 linode l5639 webhosting 商家促销 java虚拟主机 jsp空间 adroit 免费私人服务器 免费的asp空间 谷歌台湾 国外免费网盘 免费赚q币 htaccess cx域名 wannacry勒索病毒 更多