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 你不会是要求我们替你写个程序吧???
祝你好运!
可以看到这次国庆萤光云搞了一个不错的折扣,香港CN2产品6.5折促销,还送50的国庆红包。萤光云是2002年创立的商家,本次国庆活动主推的是香港CN2优化的机器,其另外还有国内BGP和高防服务器。本次活动力度较大,CN2优化套餐低至20/月(需买三个月,用上折扣+代金券组合),有需求的可以看看。官方网站:https://www.lightnode.cn/地区CPU内存SSDIP带宽/流量价格备注购...
最近我们是不是在讨论较多的是关于K12教育的问题,培训机构由于资本的介入确实让家长更为焦虑,对于这样的整改我们还是很支持的。实际上,在云服务器市场中,我们也看到内卷和资本的力量,各大云服务商竞争也是相当激烈,更不用说个人和小公司服务商日子确实不好过。今天有看到UCloud发布的夏季促销活动,直接提前和双十一保价挂钩。这就是说,人家直接在暑假的时候就上线双十一的活动。早年的双十一活动会提前一周到十天...
触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...
java发邮件为你推荐
文件下载如何从电脑里将文件下载到u盘里小项目家庭办厂小项目有哪些?家庭小厂60个图片修改工具推荐个好用的修改图片的工具硬盘分区格式化硬盘分区后怎么格式化摇一摇周边什么是微信摇一摇周边?相册网知不知道怎么把一个人的照片放到网上去?官方网店淘宝的官方网和旗舰店有什么区别?修复网络lspwin 7,lsp修复无法上网gps简介手机GPS功能是什么?无线互联网手机连接无线显示无互联网连接是怎么回事
com域名价格 美国vps 山东vps 域名服务器是什么 a5域名交易 cybermonday ion 免备案空间 免费个人博客 debian源 轻量 台湾谷歌地址 699美元 服务器干什么用的 无限流量 东莞服务器托管 lamp架构 阿里云手机官网 开心online 贵州电信 更多