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包,完成导入
接下来直接上源码
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发送邮件(用户反馈)的更多相关文章
- Android开发之InstanceState详解
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...
- [置顶] Android开发之serviceManager分析
Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...
- Android开发之InstanceState详解(转)---利用其保存Activity状态
Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...
- Android开发之旅5:应用程序基础及组件
引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...
- Android开发之旅4:应用程序基础及组件
引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...
随机推荐
- python与ruby的差别
1.引用文件差别 Ruby:同一目录下的文件,如/usr/local/ruby/foo.rb与/usr/local/ruby/bar.rb两个文件.如果直接在foo.rb中 require 'bar' ...
- YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧
最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但 ...
- spring boot servlet 注入
spring boot 注入servlet的方法是借助ServletRegistrationBean这个类 例子如下: 先建一个servlet import java.io.IOException; ...
- Android 获取版本号
啥也不是,直接看代码 public int getVersionCode(){ int versionCode = 0; try { PackageInfo packageInfo = getPack ...
- php截取中文字符串乱码问题
一般情况下说到截取字符串我们都会想到substr 然而substr对英文字符串有不错的效果,但是中文可能就会报出各种各样的问题: 所以,我们要采用mb库里面的substr,也就是mb_substr() ...
- asp值mysql驱动
http://www.sufeinet.com/thread-10278-1-1.html%20http://tool.sufeinet.com/CodePreview/CodeView.aspx?a ...
- CSU 1597 薛XX后代的IQ
Description 薛XX的低IQ是个令人头疼的问题,他的队友深受其害.幸运的是,薛XX非常有钱,所以他买了一些可以提高他的后代的IQ的药.这种药有三个属性,A,B和P.当薛XX使用这种药的时候, ...
- highchart导出功能的介绍更改exporting源码
本案利用highchar作为前端,展示数据的图形效果,结合spring+springmvc来完成数据图片的导出. jsp引入文件: <script src="${pageContext ...
- Using FreeMarker templates (FTL)- Tutorial
Lars Vogel, (c) 2012, 2016 vogella GmbHVersion 1.4,06.10.2016 Table of Contents 1. Introduction to F ...
- 【转】}目前比较全的CSS重设(reset)方法总结
在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的视 ...