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 你不会是要求我们替你写个程序吧???
祝你好运!
v5.net一直做独立服务器这块儿的,自从推出云服务器(VPS)以来站长一直还没有关注过,在网友的提醒下弄了个6G内存、2核、100G SSD的美国云服务器来写测评,主机测评给大家趟雷,让你知道v5.net的美国云服务器效果怎么样。本次测评数据仅供参考,有兴趣的还是亲自测试吧! 官方网站:https://v5.net/cloud.html 从显示来看CPU是e5-2660(2.2GHz主频),...
DMIT.io是成立于2018年的一家国外主机商,提供VPS主机和独立服务器租用,数据中心包括中国香港、美国洛杉矶和日本等,其中日本VPS是新上的节点,基于KVM架构,国际线路,1Gbps带宽,同时提供月付循环8折优惠码,或者年付一次性5折优惠码,优惠后最低每月8.72美元或者首年65.4美元起,支持使用PayPal或者支付宝等付款方式。下面列出部分日本VPS主机配置信息,价格以月付为例。CPU:...
速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...
java发邮件为你推荐
电脑手机网页浏览器可否用电脑浏览手机网页?融360融360贷款是假的是骗人的,大家注意了hotfix请问WINDOWS MEDIA PLAYER HOTFIX是什么程序,怎么无法卸载返回电脑返回上一次页面的快捷键是什么连接池什么叫做“连接池机制”项目质量管理质量管理和项目管理是什么关系啊?什么是cookie电脑里的cookies是什么意思,什么中文意思?图片修改工具要修改图片有什么软件可用硬盘分区格式化硬盘分区、格式化的主要步骤暂停线程如何正确的更好的停止一个线程
域名解析文件 阿里云os 香港加速器 ix主机 debian6 日本空间 777te 100m空间 免费美国空间 umax120 360云服务 带宽租赁 深圳域名 注册阿里云邮箱 成都主机托管 97rb 沈阳idc 湖南铁通 apachetomcat 服务器是什么 更多