app里使用163邮箱发送邮件,被163认为是垃圾邮件的坑爹经历!_ !
最近有个项目,要发邮件给用户设定的邮箱报警,然后就用了163邮箱,代码是网上借来的^^,如下:
package com.smartdoorbell.util; import android.os.AsyncTask; import java.util.Date;
import java.util.List;
import java.util.Properties; import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart; /**
* Created by zhangjie on 15/8/31.
*/
public class JEmailHelper { private int port = 25; // smtp协议使用的端口
private String host = "smtp.163.com"; // 发件人邮件服务器
private String user = "xxxxxxx@163.com"; // 使用者账号
private String password = "xxxxxxx"; // 使用者密码 private List<String> emailTos;
private List<String> emailCCs;
private String subject;
private String body;
private List<String> paths; enum SendStatus {
SENDING, UNDO, SENDOK, SENDFAIL
}; private SendStatus sendStatus; public interface JieEmailInfterface {
void startSend(); void SendStatus(SendStatus sendStatus);
} private JieEmailInfterface jieEmailInfterface; public void setJieEmailInfterface(JieEmailInfterface jieEmailInfterface) {
this.jieEmailInfterface = jieEmailInfterface;
} public JEmailHelper() {
synchronized (JEmailHelper.class) {
sendStatus = SendStatus.UNDO;
} } // 构造发送邮件帐户的服务器,端口,帐户,密码
public JEmailHelper(String host, int port, String user, String password) {
synchronized (JEmailHelper.class) {
this.port = port;
this.user = user;
this.password = password;
this.host = host;
sendStatus = SendStatus.UNDO;
}
} /**
* @param emailTos
* 主要接收人的电子邮箱列表
* @param emailCCs
* 抄送人的电子邮箱列表
* @param subject
* 邮件标题
* @param body
* 正文内容
* @param paths
* 发送的附件路径集合
*/
public void setParams(List<String> emailTos, List<String> emailCCs,
String subject, String body, List<String> paths) {
this.emailTos = emailTos;
this.emailCCs = emailCCs;
this.subject = subject;
this.body = body;
this.paths = paths;
} public void sendEmail() {
new JieAsynTask().execute();
} private void sendEmailBg() throws Exception {
Properties properties = new Properties();
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");// true一定要加引号
properties.put("mail.transport.protocol", "smtp"); JieAuthenticator jieAuth = new JieAuthenticator(user, password); Session session = Session.getInstance(properties, jieAuth);
// 创建一个消息
MimeMessage msg = new MimeMessage(session); // 设置发送人
msg.setFrom(new InternetAddress(user)); // 设置主要接收人
if (emailTos != null && !emailTos.isEmpty()) {
int size = emailTos.size();
InternetAddress[] addresses = new InternetAddress[size];
for (int i = 0; i < size; i++) {
addresses[i] = new InternetAddress(emailTos.get(i));
}
msg.setRecipients(Message.RecipientType.TO, addresses);
} // 设置抄送人的电子邮件
if (emailCCs != null && !emailCCs.isEmpty()) {
int size = emailCCs.size();
InternetAddress[] addresses = new InternetAddress[size];
for (int i = 0; i < size; i++) {
addresses[i] = new InternetAddress(emailCCs.get(i));
}
msg.setRecipients(Message.RecipientType.CC, addresses);
} msg.setSubject(subject); // 创建一个消息体
MimeBodyPart msgBodyPart = new MimeBodyPart();
msgBodyPart.setText(body); // 创建Multipart增加其他的parts
Multipart mp = new MimeMultipart();
mp.addBodyPart(msgBodyPart); // 创建文件附件
if (paths!=null){
for (String path : paths) {
if (path!=null){
MimeBodyPart fileBodyPart = new MimeBodyPart();
fileBodyPart.attachFile(path);
mp.addBodyPart(fileBodyPart);
}
} } // 增加Multipart到消息体中
msg.setContent(mp);
// 设置日期
msg.setSentDate(new Date());
// 设置附件格式
MailcapCommandMap mc = (MailcapCommandMap) CommandMap
.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc); msg.saveChanges(); // 发送消息
Transport.send(msg);
} class JieAuthenticator extends Authenticator {
private String strUser;
private String strPwd; public JieAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
} protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPwd);
}
} class JieAsynTask extends AsyncTask<Void, Void, SendStatus> { @Override
protected void onPreExecute() {
super.onPreExecute();
if (jieEmailInfterface != null) {
jieEmailInfterface.startSend();
}
} @Override
protected void onPostExecute(SendStatus result) {
super.onPostExecute(result);
if (jieEmailInfterface != null) {
jieEmailInfterface.SendStatus(result);
}
sendStatus = SendStatus.UNDO;
} @Override
protected SendStatus doInBackground(Void... params) {
try {
sendStatus = SendStatus.SENDING;
sendEmailBg();
sendStatus = SendStatus.SENDOK;
} catch (Exception e) {
e.printStackTrace();
sendStatus = SendStatus.SENDFAIL;
}
return sendStatus;
}
}
}
然后,随便输入了个标题和内容测试,没有问题。于是,把报警信息整理好,写入标题和内容,杯具的事情发生了,一直无法发送成功,返回错误信息如下:
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp11,D8CowACnIsnYuENXzwhNBw--.59036S2 1464056024,please see http://mail.163.com/help/help_spam_16.htm?ip=121.34.169.53&hostid=smtp11&time=1464056024
去http://mail.163.com/help/help_spam_16.htm?ip=121.34.169.53&hostid=smtp11&time=1464056024这个网址一看,是被作为垃圾邮件了!@ !
开始了换主题、换内容,换了N次后,才终于不被认为是垃圾邮件了,坑爹的,最啃爹的是,换了N都词语后都不行后,把“:”(汉语输入法)换成“:”(英文输入法),好了,这是什么规则?!!!
ps:上面的代码需要添加activation.jar、additionnal.jar、mail.jar,可以自行百度下载。
app里使用163邮箱发送邮件,被163认为是垃圾邮件的坑爹经历!_ !的更多相关文章
- dedecms织梦自定义表单发送到邮箱-用163邮箱发送邮件
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_3_dg&wd=dedecms 邮箱&oq=d ...
- java调用163邮箱发送邮件
1:注册一个163邮箱,http://mail.163.com 调用发送邮件代码,查询smtp.163.com,作为发送邮件的服务器ip,类似的邮箱服务器应该也可以. MailSenderInfo m ...
- CentOS7像外部163邮箱发送邮件
我们在运维过程中,为了随时了解服务器的工作状态,出现问题随时提醒,像个人邮箱发送邮件是必须的,但是刚刚安装好的系统是无法发送邮件的.需要们进行一些配置和程序的安装,我安装完系统后,自带mail12.5 ...
- java连接163邮箱发送邮件
一:jar包:下载链接:链接: http://pan.baidu.com/s/1dDhIDLv 密码: ibg5二:代码 1-------------------------------------- ...
- Linux下用mail 命令给163邮箱发送邮件!
linux上的邮件客户端比较多,找一个平时用的比较多mail命令来试试!! 环境 :centos7: 注意 : 服务器必须得有外网才行,qq邮箱作为在linux上的发送端邮箱,经过测试 163 和qq ...
- python练习-使用163邮箱发送邮件
具体代码如下> #密码等敏感信息已经用****替换 import smtplib,sys from email.mime.text import MIMEText from email.head ...
- python通过163邮箱发送邮件
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib i ...
- 5、Selenium+Python自动登录163邮箱发送邮件
1.Selenium实现自动化,需要定位元素,以下查看163邮箱的登录元素 (1)登录(定位到登录框,登录框是一个iframe,如果没有定位到iframe,是无法定位到账号框与密码框) 定位到邮箱框( ...
- python使用qq邮箱向163邮箱发送邮件、附件
在生成html测试报告后 import smtplib,time from email.mime.text import MIMEText from email.mime.multipart impo ...
随机推荐
- BZOJ 3365 Distance Statistics 点分治
这道题是一道点分治的题目,难度不大,可以拿来练手. 关键是对于找出来的重心的删除操作需要删掉这条边,这很重要. 还有每次找重心的时候,不但要考虑他的子节点的siz,还要考虑父节点的siz. 然后就A了 ...
- rabbitmq method之basic.consume
basic.consume指的是channel在 某个队列上注册消费者,那在这个队列有消息来了之后,就会把消息转发到给此channel处理,如果 这个队列有多个消费者,则会采用轮转的方式将消息分发给消 ...
- Asp.Net Mvc Areas 的用法与好处
前言 在项目中为什么要使用Areas 进行分离 大家都知道,一般的Web应用都有前台(面向用户)和后台(面向管理员)两部分,我们希望以/localhost/Admin 开始的Url 是用户的后台管理地 ...
- MAC emacs下安装php-mode
在某一个个页面(抱歉不记得了), 比较了三个配置,php-mode, php-mode-improved, xnhtml. 作者在比较后推荐xnhtml,但在xnthml官网下载链接一直显示403,真 ...
- web前端程序员真的值这么多钱吗?
对于互联网公司来说用户就是上帝,做好客户体验一切才有可能.所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用. 前端工程师工资也越来越高,目前Web前端工程师工作1~2年后通常会 ...
- Redmine新建问题速度慢
Redmine有时候新建问题 ,更新指派人的时候反应很慢, 很大原因应该是发送邮件方式不对. 1.一种方式是改为异步发送 2.另外检测到Redmine日志 ,会发现发送邮件失败 ,也会导致发 ...
- Java实现选择排序
选择排序思想就是选出最小或最大的数与第一个数交换,然后在剩下的数列中重复完成该动作. package Sort; import java.util.Arrays; public class Selec ...
- 使用HTTPS网站搭建iOS应用内测网站(OTA分发iOS应用)
为什么要搭建应用内测网站呢? 1.AppStore的审核速度比较慢,万一被拒,还得等,而且一旦发布,任何人都可以下载,而有些时候只有老板想知道最新的修改是否符合要求,万一不符合要求呢?又要修改了. 2 ...
- 暑假CTF训练一
暑假CTF训练一 围在栅栏中的爱 题目: 最近一直在好奇一个问题,QWE到底等不等于ABC? -.- .. --.- .-.. .-- - ..-. -.-. --.- --. -. ... --- ...
- aix磁盘分区挂载问题
aix在进行磁盘分区挂载时,可能会报错