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

时间: 2024-08-01 22:40:42

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

android开发之-Android 开发之4.0界面设计原则-整理

设计原则: 一.让人着迷: 1.给人惊喜:使用漂亮的界面.精心的动画.适时的音乐. 2.真实的对象比按钮和菜单更有趣 这句话的意思是:使用描述描述性的图标作为快捷方式,界面美观 当然这个快捷方式是描述一个实体的,像一个人,不是扁平化的 3.个性化设计 提供个性化设计,提高亲切感和控制感.多设计几套个性化方案 4.记住人们的使用习惯,不要重复问 记住人们的使用习惯,不要重复问.多使用可以自动记住的控件,Autocomplete控件,不要每次询问操作 二.简单我的生活 1.使用简单词.短句子. 人们

Android开发之Fragment详解

Android开发之Fragment学习 1.简介: Fragment是Android 3.0引入的新API. Fragment代表了 Activity的子模块,因此可以把Fragment理解成Activity片段.Fragment用于自己的生命周期,也可以接受它自己的输入事件. Fragment必须被"嵌入" Activity中使用,因此虽然Fragment也拥有自己的生命周期,但Fragment的生命周期会受它所在的Activity的生命周期的控制.例如,当Activity暂停时,

android开发之MediaPlayer+Service MP3播放器

http://blog.csdn.net/zzy916853616/article/details/6450753 [java] view plaincopy import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.apps.service.Player

Android开发之InstanceState详解

Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用InstanceState保存和恢复数据功能.Android实现屏幕旋转异步下载效果这样两个示例. 首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Andr

Android开发之WebView详解

概述: 一个显示网页的视图.这个类是你可以滚动自己的Web浏览器或在你的Activity中简单地显示一些在线内容的基础.它使用了WebKit渲染引擎来显示网页,包括向前和向后导航的方法(通过历史记录),放大和缩小,执行文本搜索等. 需要注意的是:为了让你的应用能够使用WebView访问互联网和加载网页,你必须添加Internet的权限在Android Manifest文件中: <uses-permission android:name="android.permission.INTERNE

Android开发之AudioManager(音频管理器)详解

AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这个类的一个实例. 公有方法: Public Methods int abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl) 放弃音频的焦点. void adjustStreamVolume(int streamType, int dir

Android开发之WebService介绍

经常有网友问:“在Android平台如何调用WebService”?经过沟通我发现,甚至有些朋友连什么是WebSerivce都不知道就在问怎么使用,更别说和WebService有关的SOAP.WSDL这类“火星”名词了.所以,我就想在讲解Android平台如何调用WebSerivce之前,先来介绍下WebService,看看它到底有多神秘.      记得我的硕士论文题目中就包含“Web Service”这个词,当时还是花了大量时间去研究Web Service在系统集成.企业应用整合方面的应用:

Android开发之Tomast

第一次在博客园发布文章,就把我刚弄明白的关于Android开发中的提示设置,分享给大家. Tomast是Android中经常用到的一个方法,用于简单的用户提示,经过摸索我发现了Tomast的两种使用方式,先不扯别的,分享一下,还望大师指教. 第一种系统默认的方式: Toast.makeText(getApplicationContext(), "系统自带提示形式", Toast.LENGTH_SHORT).show(); 第二种自定义方式: Toast toast = new Toas

【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的..... 需求: 在listview中出一个EditText 接受用户输入消息. 前期解决方案: 给这个EditText绑定焦点事件.... 悲剧就开始了... 知道吗?当这个EditTextView被点了下,它的焦点就不断的获取,失去,获取,失去...  只点一下... 就频繁的重复..最后大部