在Android中集成邮件发送功能

在新开发的APP中集成邮件发送功能,用来做用户信息反馈功能,支持带附件发送;

使用的javaMail、 Apache Commons Email 来集成邮件发送功能,

这里所需要用到的jar包:http://download.csdn.net/detail/uu00soldier/9630366

我测试的时候使用到了163、qq/foxmail邮箱这两种;

qq邮箱使用的时候要做一下特殊的处理,他是使用授权串的方式作为密码的,QQ邮箱的具体设置方法如下:

参考资料:http://www.jb51.net/article/78405.htm

开启SMTP服务

在 QQ 邮箱里的 设置->账户里开启 SMTP 服务

在Android中集成邮件发送功能_第1张图片

注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原始的邮箱密码,这样可以避免使用明文密码。

在Android中集成邮件发送功能_第2张图片

若使用163邮箱,无需设置,直接使用账号、密码即可

关于setHostName()、setSmtpPort()两个参数的设置:

使用163邮箱的情况,直接设置smtp.163.com:25,即setHostName("smtp.163.com")、setSmtpPort(25),端口也可以不设置,默认的就是25端口

使用QQ邮箱分两种:

1、设置端口号,smtp.qq.com:587,将这个属性设置进去,就可以实现邮件发送功能;

2、不设置端口号,设置email.setStartTLSEnabled(true);属性也可以达到效果(端口号也可以保留);


完整代码如下:

        tvSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String receive = "";//接收邮箱
                final String cc = "";//抄送邮箱
                final String bcc = "";//密送邮箱
                final String send = "";//发送邮箱
                final String pwd = "";//邮箱密码
                final String subject = "";//发送标题
                final String message = "";//发送文本信息
                // 建立发送邮件任务
                new AsyncTask() {
                    @Override
                    protected Boolean doInBackground(String... params) {
                        try {
                            // sendEmailByApacheCommonsNet(send, pwd,receive, subject, message);
                            System.out.println("send=" + send + ",pwd=" + pwd + ",receive=" + receive + ",subject=" + subject + ",message="
                                    + message);
                            sendEmailByApacheCommonsEmail(send, pwd, receive, cc, bcc, subject, message);
                            return true;
                        } catch (Exception e) {
                            e.printStackTrace();
                            return false;
                        }
                    }
                }.execute();
            }
        });
   
   /**
     * 检测邮箱地址是否合法
     *
     * @param address
     * @return true合法 false不合法
     */
    private boolean verifyEmailAddress(String address) {
        if (null == address || "".equals(address))
            return false;

        Pattern p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");// 复杂匹配
        Matcher m = p.matcher(address);
        return m.matches();
    }

    /**
     * @throws EmailException
     * @Description TODO 发送带附件的email
     */
    private void sendEmailByApacheCommonsEmail(String from, String fromPwd, String to, String cc, String bcc, String subject, String message)
            throws EmailException {

        if (!verifyEmailAddress(from) || !verifyEmailAddress(to)) {
            System.out.println("enter verifyEmailAddress");
            return;
        }

        // Create the email message
        MultiPartEmail email = new MultiPartEmail();
        email.setDebug(true);
        // 这里使用163邮箱服务器,实际需要修改为对应邮箱服务器
        //smtp.163.com:25   smtp.qq.com:587
        email.setHostName("smtp.qq.com");
//        email.setSmtpPort(465);//163邮箱25
        email.setSocketTimeout(6 * 1000);
        email.setCharset("UTF-8");
//        email.setTLS(true);
        email.setStartTLSEnabled(true);
//        email.setSSL(true);
        email.setAuthentication(from, fromPwd);
        email.addTo(to, to);
        email.addBcc(bcc);
        email.addCc(cc);
        email.setFrom(from, from);
        email.setSubject(subject);
        email.setMsg(message);

        // Create the attachment
        EmailAttachment attachment2 = new EmailAttachment();
        attachment2.setPath(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "pdf02.png");
        attachment2.setDisposition(EmailAttachment.ATTACHMENT);
        attachment2.setDescription("pdf02");
        attachment2.setName("pdf02.png");

        EmailAttachment attachment1 = new EmailAttachment();
        attachment1.setPath(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "pdf01.png");
        attachment1.setDisposition(EmailAttachment.ATTACHMENT);
        attachment1.setDescription("pdf01");
        attachment1.setName("pdf01.png");

        email.attach(attachment1);
        email.attach(attachment2);

        // send the email
        String sendStr = email.send();
        System.out.println("sendStr=" + sendStr);
    }


你可能感兴趣的:(邮件,javamail,附件)