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 = "[email protected]"; // 使用者账号
    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,可以自行百度下载。

时间: 2024-10-13 12:42:58

app里使用163邮箱发送邮件,被163认为是垃圾邮件的坑爹经历!_ !的相关文章

关于企业邮箱服务器经常被spamhaus反垃圾邮件组织拦截的排错方法分享

其实在企业邮件平台管理过程中,企业邮箱管理员经常会被各种各样的邮箱问题所困扰,而困扰最大的除了服务器规划不当带来的后期服务器维护的困难外,还有最致命也是最让邮件管理员着急的事情,那就是企业邮箱经常被一些国际反垃圾邮件组织列为黑名单,也许,很多人会在想,如果是列为了黑名单,那么直接进行申诉,释放就可以了,这个回答其实也勉强可以算是对的,但是从申诉到释放,其实也是需要等待一个时间的,那么这时出现大批量的用户反映,我个人认为这其实也是邮件平台不稳定的一个体现,做为管理员,则必须要了解被列为黑名单的根本

centos 7 postfix配置163邮箱发送邮件

[[email protected] .certs]# vim /etc/mail.rc #修改配置文件,最后面添加即可 set [email protected] set smtp.163.com set smtp-auth-user=wcczcl set smtp-auth-password=1454545 set smtp-auth=login set smtp-use-starttls set ssl-verify=ignore set nss-config-dir=/etc/pki/n

CentOS7像外部163邮箱发送邮件

我们在运维过程中,为了随时了解服务器的工作状态,出现问题随时提醒,像个人邮箱发送邮件是必须的,但是刚刚安装好的系统是无法发送邮件的.需要们进行一些配置和程序的安装,我安装完系统后,自带mail12.5,依然无法外发邮件. 第一步,安装sendmail,和sendmail-cf 使用命令: yum install -y sendmail yum install -y sendmail-cf yum源安装是最方便的安装,自动解决依赖关系. 第二步,配置sendmail.mc 文件 vi /etc/m

Linux配置163邮箱发送邮件

利用163邮箱简单的发送邮件,下面记录配置步骤,仅仅记录要点步骤.`` 申请163邮箱,开通客户端授权码以后,客户端可以利用这个授权码发送邮件.不需要繁琐的验证机制. 将配置信息添加到/etc/mail.rc文件末尾.send emailset [email protected]set smtp=smtp.163.com:25set smtp-auth=login授权用户set [email protected]授权密码set smtp-auth-password=123456zrj忽略验证se

5、Selenium+Python自动登录163邮箱发送邮件

1.Selenium实现自动化,需要定位元素,以下查看163邮箱的登录元素 (1)登录(定位到登录框,登录框是一个iframe,如果没有定位到iframe,是无法定位到账号框与密码框) 定位到邮箱框(name='email') 定位到密码框(name='password') 定位到登录按钮(id="dologin") 2.代码实现 #coding=utf-8 import time from selenium import webdriver broswer = webdriver.I

163邮箱设置 手机163.net邮箱设置

在工作中一个安全好用的邮箱可以给人提供莫大的帮助,那么163NET邮箱该如何设置呢?接下来小编将给大家一一介绍.更改界面皮肤:登录163邮箱,点击LOGO右侧设置按钮,选择更多皮肤,可进入邮箱皮肤设置界面,可以根据自己的喜好选择皮肤.设置电子名片:登录163邮箱,点击LOGO右侧设置按钮,选择签名/电子名片按钮,可修改电子名片选择新建签名或电子名片填写个人信息后玩车从邮箱名片设置建立联系人分分组:点击邮箱界面的联系人标签,选择新建联系人,填写分组名称和添加联系人设置黑白名单:在选择设置按钮后,选

php使用163邮箱发送邮件

email.class.php文件 <? class smtp { /* Public Variables */ var $smtp_port; var $time_out; var $host_name; var $log_file; var $relay_host; var $debug; var $auth; var $user; var $pass; /* Private Variables */ var $sock; /* Constractor */ function smtp($r

未解决的问题,登录163邮箱http://mail.163.com/,用xpath的方式定位密码输入框的时候,总是报找不到该元素

退出的时候出现: xpath定位方法: 注意xpath路径写的太长,如果层级全部写完定位不到,就尝试去掉一些层级

G. PHP发送邮件功能实现(使用163邮箱)

第一步 我用的是163邮箱发送邮件,做一个尝试,在尝试之前,需要要开启163邮箱的授权码如图所示,请记住您的授权码,将在之后的步骤中用到 第二步 需要下载一个类PHPMailer,我有这个资源已经上传了,免费的哦亲,连接在这http://download.csdn.NET/detail/s371795639/9693417 下载后,解压后此文件夹放在Vendor目录下,Vendor目录下有个PHPMailer文件夹,那就对了~ 第三步 咱们该写代码了 html代码: <body> <fo