java邮件发送 qq与163邮箱互发和qq和163邮箱发送其他邮箱实例
研究了近一天的时间,通过查阅相关资料,终于对java发送邮件的机制,原理有了一点点的理解,希望能够帮到大家!
1.首先要向你的项目里导入1个jar包:mail-1.4.4.jar即可(实现qq和163邮箱发送其他邮箱(此案例只演示一种))
2.代码如下所示
public class TestDemo1 {
static String SSL_EMAIL = "javax.net.ssl.SSLSocketFactory";
//需要传的值都在main方法调用的sendmail里传!
public static void main(String[] args) {
String s = sendmail(username, pass, from, to, subject, content);
System.out.println(s);
}
/**
*
* @param username 发件人邮件的用户名
* @param pass 发件人邮件的密码(此密码一定要是授权码 授权码:在发件人邮箱内开启smtp/pop3协议所获得的授权码)
* @param from 发件人邮箱
* @param to 收件人邮箱
* @param subject 邮件标题
* @param content 邮件内容
* @return
*/
public static String sendmail(final String username, final String pass,
String from, String to, String subject, String content) {
//Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
//设置系统参数
Properties props = System.getProperties();
props.setProperty("mail.smtp.socketFactory.class", SSL_EMAIL);
props.setProperty("mail.smtp.socketFactory.fallback", "true");
props.setProperty("mail.store.protocol", "smtp");
props.setProperty("mail.smtp.host", "smtp.qq.com");
//props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
//创建邮件会话
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, pass);
}
});
//创建邮件信息
Message msg = new MimeMessage(session);
try {
msg.setFrom(new InternetAddress(username));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(content);
msg.setSentDate(new Date());
Transport.send(msg);
return "1";
} catch (MessagingException e) {
return e.getMessage();
}
}
}
3.发送邮件切记的有一下几点:
(1)发送邮件方一定要开通smtp/pop3协议!
(2)发送邮件方一定要用开通后的授权码当做密码来设置!
(3)当改变发送方的邮件类型时(比如说一开始你用的XXX@qq.com,要换成XXX@163.com)一定要换mail.smtp.host
qq的是smtp.qq.com,163的是smtp.163.com
(4)下面是常见的错误类型:最常见的为 550 DT:SPM 和535(535为你的发送邮件方信息填写错了,可能是授权码过期,也可能是用户名写错了)
•421 HL:REP 该IP发送行为异常,存在接收者大量不存在情况,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并核对发送列表有效性;
•421 HL:ICC 该IP同时并发连接数过大,超过了网易的限制,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并降低IP并发连接数量;
•421 HL:IFC 该IP短期内发送了大量信件,超过了网易的限制,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并降低发送频率;
•421 HL:MEP 该IP发送行为异常,存在大量伪造发送域域名行为,被临时禁止连接。请检查是否有用户发送病毒或者垃圾邮件,并使用真实有效的域名发送;
•450 MI:CEL 发送方出现过多的错误指令。请检查发信程序;
•450 MI:DMC 当前连接发送的邮件数量超出限制。请减少每次连接中投递的邮件数量;
•450 MI:CCL 发送方发送超出正常的指令数量。请检查发信程序;
•450 RP:DRC 当前连接发送的收件人数量超出限制。请控制每次连接投递的邮件数量;
•450 RP:CCL 发送方发送超出正常的指令数量。请检查发信程序;
•450 DT:RBL 发信IP位于一个或多个RBL里。请参考http://www.rbls.org/关于RBL的相关信息;
•450 WM:BLI 该IP不在网易允许的发送地址列表里;
•450 WM:BLU 此用户不在网易允许的发信用户列表里;
•451 DT:SPM ,please try again 邮件正文带有垃圾邮件特征或发送环境缺乏规范性,被临时拒收。请保持邮件队列,两分钟后重投邮件。需调整邮件内容或优化发送环境;
•451 Requested mail action not taken: too much fail authentication 登录失败次数过多,被临时禁止登录。请检查密码与帐号验证设置;
•451 RP:CEL 发送方出现过多的错误指令。请检查发信程序;
•451 MI:DMC 当前连接发送的邮件数量超出限制。请控制每次连接中投递的邮件数量;
•451 MI:SFQ 发信人在15分钟内的发信数量超过限制,请控制发信频率;
•451 RP:QRC 发信方短期内累计的收件人数量超过限制,该发件人被临时禁止发信。请降低该用户发信频率;
•451 Requested action aborted: local error in processing 系统暂时出现故障,请稍后再次尝试发送;
•500 Error: bad syntaxU 发送的smtp命令语法有误;
•550 MI:NHD HELO命令不允许为空;
•550 MI:IMF 发信人电子邮件地址不合规范。请参考http://www.rfc-editor.org/关于电子邮件规范的定义;
•550 MI:SPF 发信IP未被发送域的SPF许可。请参考http://www.openspf.org/关于SPF规范的定义;
•550 MI:DMA 该邮件未被发信域的DMARC许可。请参考http://dmarc.org/关于DMARC规范的定义;
•550 MI:STC 发件人当天的连接数量超出了限定数量,当天不再接受该发件人的邮件。请控制连接次数;
•550 RP:FRL 网易邮箱不开放匿名转发(Open relay);
•550 RP:RCL 群发收件人数量超过了限额,请减少每封邮件的收件人数量;
•550 RP:TRC 发件人当天内累计的收件人数量超过限制,当天不再接受该发件人的邮件。请降低该用户发信频率;
•550 DT:SPM 邮件正文带有很多垃圾邮件特征或发送环境缺乏规范性。需调整邮件内容或优化发送环境;
•550 Invalid User 请求的用户不存在;
•550 User in blacklist 该用户不被允许给网易用户发信;
•550 User suspended 请求的用户处于禁用或者冻结状态;
•550 Requested mail action not taken: too much recipient 群发数量超过了限额;
•552 Illegal Attachment 不允许发送该类型的附件,包括以.uu .pif .scr .mim .hqx .bhx .cmd .vbs .bat .com .vbe .vb .js .wsh等结尾的附件;
•552 Requested mail action aborted: exceeded mailsize limit 发送的信件大小超过了网易邮箱允许接收的最大限制;
•553 Requested action not taken: NULL sender is not allowed 不允许发件人为空,请使用真实发件人发送;
•553 Requested action not taken: Local user only SMTP类型的机器只允许发信人是本站用户;
•553 Requested action not taken: no smtp MX only MX类型的机器不允许发信人是本站用户;
•553 authentication is required SMTP需要身份验证,请检查客户端设置;
•554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;
•554 DT:SUM 信封发件人和信头发件人不匹配;
•554 IP is rejected, smtp auth error limit exceed 该IP验证失败次数过多,被临时禁止连接。请检查验证信息设置;
•554 HL:IHU 发信IP因发送垃圾邮件或存在异常的连接行为,被暂时挂起。请检测发信IP在历史上的发信情况和发信程序是否存在异常;
•554 HL:IPB 该IP不在网易允许的发送地址列表里;
•554 MI:STC 发件人当天内累计邮件数量超过限制,当天不再接受该发件人的投信。请降低发信频率;
•554 MI:SPB 此用户不在网易允许的发信用户列表里;
•554 IP in blacklist 该IP不在网易允许的发送地址列表里。
如果有想群发,添加附件,邮件内容可以用html标签写内容的,请查看我的博客
此次发表的博客,有自己想法,也有向其他前辈的借鉴,有错的地方大家多多留言提点,我会继续做的更好!
java邮件发送 qq与163邮箱互发和qq和163邮箱发送其他邮箱实例的更多相关文章
- java邮件发送(以163邮箱为例)
1.首先应该开通163邮箱的smtp和pop3,得到授权码 2.其次建立一个web项目,否则需要倒jar包mail.jar 3.创建一个类 4.注意:邮件内容必须为正式话语,否则系统会认为是垃圾邮件而 ...
- JAVA邮件发送的简单实现
JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注 ...
- java 邮件发送工具类
首先需要下载mail.jar文件,我个人通常是使用maven中心库的那个: <dependency> <groupId>javax.mail</groupId> & ...
- java 邮件发送工具类【来源网络自己已经实际应用】
最近在做一个Java发送邮件的工具类,现在分享一下完整的代码 首先需要java邮件的包javax.mail-1.5.4.jar 之前因为链接给错了,很不好意思,现在重新发一次. 包在这里可以下载htt ...
- 【转】基于JavaMail的Java邮件发送
http://blog.csdn.net/xietansheng/article/details/51673073 http://blog.csdn.net/xietansheng/article/d ...
- 基于JavaMail的Java邮件发送:复杂邮件发送
参考:http://blog.csdn.net/xietansheng/article/details/51722660package com.bfd.ftp.utils;import java.ut ...
- java邮件发送工具
最近在web项目中,客户端注册时需要通过邮箱验证,服务器就需要向客户端发送邮件,我把发送邮件的细节进行了简易的封装: 在maven中需要导入: <!--Email--> <depen ...
- spingboot之Java邮件发送
注意: 该项目的工具类可以直接应用于项目 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- java 邮件 接收与发送
... package com.e6soft; import java.io.BufferedReader; import java.io.FileOutputStream; import java. ...
随机推荐
- 2010“架构师接龙”问答--杨卫华VS赵劼(转)
add by zhj:虽然是几年前的文章,但还是很有参考价值的 原文:http://blog.zhaojie.me/2010/05/programmer-magazine-2010-5-archite ...
- Oracle中INT、FLOAT、NUMBER区别
Oracle里的int等于number(长度,0) float也类似,number要定义小数部分的位数,而float不用定义后边小数有几位 因为NUMBER要确定长度,后边确定小数位. 所以,如果不 ...
- Unity3D Script KeynoteII
[Unity3D Script KeynoteII] 1.使用代码操作Particle. //粒子对象 GameObject particle = null; //粒子X轴方向速度 float vel ...
- lib和dll的例子
.dll和.lib的区别 lib是静态库,dll一般是动态链接库(也有可能是别的)比如要编译个exe,lib在编译的时候就会被编译到exe里,作为程序的一部分而dll是不被编译进去,是运行的时候才调入 ...
- Eclipse 安装对 Java 8 的支持
Java 8 正式版今天已经发布了(详情),但最常用的 Java 开发工具 Eclipse 还没有正式发布对 Java 8 的支持.不过目前可以通过更新 JDT 来支持 Java 8.步骤如下: 菜单 ...
- Objective-C 学习记录--toches、Motion/Size/Rect/Point/CGFloat/protocol
- (void)touchesBegan touchesEnd touchesCancelled touchesMoved //代表的是手指在屏幕上的动作,开始 结束 取消 移动 //还有就是代表摇动 ...
- user is not in the sudoers file.This incident will be reported
我用普通用户ssk登陆,想让ssk成为拥有超级用户的权限的普通用户 开始提示输入密码错误 ,然后就这样了 解决方法如下: 1>.进入超级用户模式.也就是输入"su -", ...
- VS2015生成64位dll文件
导入自己的源文件,准备生成DLL文件.也可以自己创建. 右键项目,进入属性,修改Configuration Type 为 DLL. 修改为64位,Configureation Manager -> ...
- vc6.0 通过ADO(udl)连接sql 2008
转载声明:本文转自http://blog.sina.com.cn/s/blog_7328b9dd0100pkbw.html茗之的博客 首先声明:本文是针对vc与sql菜鸟的,高人请让路. 本文讲解 ...
- 解决 Cocos2d-x 中 Android.mk 手动添加源文件
转自:http://blog.csdn.net/ypfsoul/article/details/8909178 Makefile Android.mk 引发的思索 在我们编写 Android 平台 c ...