zoukankan      html  css  js  c++  java
  • Android开发之JavaMail发送邮件(用户反馈)

    给APP增加了一个用户反馈的小功能,由于懒的搭服务器,所以就用邮件的形式进行通信,有如下两种方式:

    1.使用调用手机上的其他程序完成邮件发送

    2.使用javamail进行邮件发送

    这里果断使用javamail,因为我们大多数并不会在手机上使用邮件APP

    使用javamail需要三个jar包,分别是additional.jar、mail.jar和activation.jar,可以到google官网下载:https://code.google.com/archive/p/javamail-android/downloads

    我当时是因为没法上google的域名,baidu了好多,导包之后各种 java.lang.NoClassDefFoundError: javax.activation.DataHandler 错误,这是因为导入的activation.jar包有问题,这里放上从google下载的:

    http://download.csdn.net/detail/u012062785/9685867

    eclipse导入jar包方法:

    1.在项目的根目录下,新建文件夹libs,将下载的3个jar包放入该文件夹

    2.选中项目,右键->Properties->Java Build Path->Libraries,选择Add External JARs,找到项目下lib目录的3个jar包,完成导入

    接下来直接上源码

     1 package com.pngcui.testmail;
     2 
     3 import java.util.Properties;
     4 
     5 import javax.mail.Message;
     6 import javax.mail.MessagingException;
     7 import javax.mail.PasswordAuthentication;
     8 import javax.mail.Session;
     9 import javax.mail.Transport;
    10 import javax.mail.internet.InternetAddress;
    11 import javax.mail.internet.MimeMessage;
    12 
    13 
    14 public class MailSend {
    15     
    16     private String mailContext;
    17     
    18     public MailSend(String context){
    19         this.mailContext = context;
    20     }
    21     
    22     public void sendMail() throws MessagingException{
    23         Properties props = new Properties();
    24         //使用smtp代理,且使用网易163邮箱
    25         props.put("mail.smtp.host", "smtp.163.cn");
    26         //设置验证
    27         props.put("mail.smtp.auth", "true");
    28         MyAuthenticator myauth = new MyAuthenticator("发件人邮箱@163.com", "密码");
    29         Session session = Session.getInstance(props,myauth);
    30         //打开调试开关
    31         session.setDebug(true);
    32         MimeMessage message = new MimeMessage(session);
    33         InternetAddress fromAddress = null;
    34         //发件人邮箱地址
    35         fromAddress = new InternetAddress("发件人邮箱@163.com");
    36         message.setFrom(fromAddress);
    37         
    38         InternetAddress toAddress = new InternetAddress("收件人邮箱地址");
    39         message.addRecipient(Message.RecipientType.TO, toAddress);
    40         message.setSubject("邮件标题");
    41         message.setText(mailContext);// 设置邮件内容
    42         //message.setFileName("邮件附件");
    43         message.saveChanges(); //存储信息
    44         
    45         
    46         Transport transport = null;
    47         transport = session.getTransport("smtp");
    48         transport.connect("smtp.163.com", "发件人邮箱@163.com", "密码");
    49         transport.sendMessage(message, message.getAllRecipients());
    50         
    51         transport.close();
    52     }
    53     
    54     class MyAuthenticator extends javax.mail.Authenticator {
    55         private String strUser;  
    56         private String strPwd;  
    57       
    58         public MyAuthenticator(String user, String password) {  
    59             this.strUser = user;  
    60             this.strPwd = password;  
    61         }  
    62       
    63         @Override
    64         protected PasswordAuthentication getPasswordAuthentication() {  
    65             return new PasswordAuthentication(strUser, strPwd);  
    66         }  
    67     }
    68 }

    最后附录几个我遇到的问题

    1.Authentication认证失败,是因为你的密码或者邮箱地址有误,163的邮箱尽量不要使用新申请的,而且这个密码是客户端授权密码,不是你的邮箱登录密码!

    2. com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp4,遇到这个问题是被反垃圾了==,在邮件标题或者邮件正文不要出现test或者helloworld的内容,否则网易会认为是垃圾邮件,导致无法发送出去。无法发送的原因可以参考http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

    最后调用new MailSend("邮件正文").sendMail();就可以发送出去了!!

  • 相关阅读:
    三个问题
    2014-7
    2014-5
    2014-2
    2014-1
    2013-11
    mysql中对表操作----为所有列插入数据
    Redis做消息队列
    收集Nginx-access,Nginx-error日志
    .Nginx安装filebeat收集日志:
  • 原文地址:https://www.cnblogs.com/pngcui/p/6074639.html
Copyright © 2011-2022 走看看