给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包,完成导入

接下来直接上源码

 package com.pngcui.testmail;

 import java.util.Properties;

 import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; public class MailSend { private String mailContext; public MailSend(String context){
this.mailContext = context;
} public void sendMail() throws MessagingException{
Properties props = new Properties();
//使用smtp代理,且使用网易163邮箱
props.put("mail.smtp.host", "smtp.163.cn");
//设置验证
props.put("mail.smtp.auth", "true");
MyAuthenticator myauth = new MyAuthenticator("发件人邮箱@163.com", "密码");
Session session = Session.getInstance(props,myauth);
//打开调试开关
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
InternetAddress fromAddress = null;
//发件人邮箱地址
fromAddress = new InternetAddress("发件人邮箱@163.com");
message.setFrom(fromAddress); InternetAddress toAddress = new InternetAddress("收件人邮箱地址");
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject("邮件标题");
message.setText(mailContext);// 设置邮件内容
//message.setFileName("邮件附件");
message.saveChanges(); //存储信息 Transport transport = null;
transport = session.getTransport("smtp");
transport.connect("smtp.163.com", "发件人邮箱@163.com", "密码");
transport.sendMessage(message, message.getAllRecipients()); transport.close();
} class MyAuthenticator extends javax.mail.Authenticator {
private String strUser;
private String strPwd; public MyAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
} @Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPwd);
}
}
}

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

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();就可以发送出去了!!

Android开发之JavaMail发送邮件(用户反馈)的更多相关文章

  1. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  2. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  3. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  4. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  5. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  6. [置顶] Android开发之serviceManager分析

    Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...

  7. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  8. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  9. Android开发之旅4:应用程序基础及组件

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

随机推荐

  1. 【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"的解决办法

    新装IIS,然后发布网站,运行出现如下错误提示 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 于是 ...

  2. python学习笔记之迭代器和函数(第三天)

    一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...

  3. 跳转 linQ

    <a href="../Book/BookDetail?book_id=@book.book_id">@book.book_name</a> query + ...

  4. 在XP上安装WinPython最新版本

    2015年3月30日星期一 16:01:47     晴 WinPython 新版本不再支持Windows XP平台,会出现错误提示WindowsError 127. 按照官网论坛上的解决方案(htt ...

  5. NOI 动态规划题集

    noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...

  6. [原]ComFriendlyWaitMtaThreadProc

    c++代码(大体逻辑没问题,细节需要确认) DWORD __stdcall *ComFriendlyWaitMtaThreadProc(LPVOID lpThreadParameter) { CoIn ...

  7. 通知Notification

    步骤: 1.调用getSystemService()获取NotificationManager:NotificationManager manager = (NotificationManager)g ...

  8. sql-计算每个月星期几有几天

    --建立函数计算星期 create function w_count( ) --月份 ,))--星期几 returns int as begin ' as datetime) ,,')) as dat ...

  9. repeater留言板[转]

    做了一个网站,其中的在线留言板块是用Repeater来显示留言的,这样可以用少的代码还实现多的功能,但是不知道怎么分页,要是留言过多就会使页面变的很长,能过查看众多网友的经验,知道用PagedData ...

  10. Android 基础概念了解

    Android 的前世今生Android 系统框架Android 主要组成 部分Android 常用的操作 Android 的前世今生 Android 的诞生 2003年10月,有"Andr ...