Android 发邮件
由于刚学android,就接到一个任务,做个发邮件的任务,从网上一顿找啊,感觉还是这个比较好,推荐一下
在android里进行邮件客户端开发可以有两种方式:
在邮件客户端的设计中,可以采用两种方法。
l 一种是调用android系统自带的邮件服务
优点:这种方法比较简单易用
缺点:发送邮件的账号必须是gmail账号
l 令一种方法是采用javamail功能包
优点:可以设置邮件服务器地址,不必局限于gmail邮箱
缺点:用法比较复杂
下面依次介绍这两种方式:
先看应用android自带邮件系统的关键代码
- //建立Intent对象
- Intent intent = new Intent();
- //设置对象动作
- intent.setAction(Intent.ACTION_SEND);
- //设置对方邮件地址
- intent.putExtra(Intent.EXTRA_EMAIL, new String[]
- { "abc@com.cn","edf@com.cn" });
- //设置标题内容
- intent.putExtra(Intent.EXTRA_SUBJECT, "test");
- //设置邮件文本内容
- intent.putExtra(Intent.EXTRA_TEXT, "test mail");
- 启动一个新的ACTIVITY,"Sending mail..."是在启动这个
- ACTIVITY的等待时间时所显示的文字
- startActivity(Intent.createChooser(intent, "Sending
- mail..."));
只有上面的代码有可能还会出现异常,你运行的时候会提示一个错误:no application can perform this action会有这个错误提示,是由于你没有在模拟器上配置gmail邮箱,输入自己的gmail账号和密码,默认使用的是你的gmail账号发信。
使用javamail实现的代码
在android里使用javamail需要依赖3个包,activation.jar,additionnal.jar,mail.jar
同时还要注意一个最重要的地方那就是开启你访问互联网的权限不然你一点用没有。。。。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
对于JavaMail,最基础的功能就是邮件的发送和接收,在这里,我先讲一讲邮件的发送。
在写具体的程序前,先讲一些概念。1.邮件的发送:如果你的邮件地址是a@host.com,而你要用这个邮箱发送一封邮件到to@tohost.com,这个发送过程是怎样的呢,你以为是先连接到tohost.com这服务器上,然后把邮件发送出去吗?其实不然。最初,你需要连接到服务器host.com上,当然这个连接可能需要认证,然后是发送邮件到服务器host.com上,关闭连接。在host.com上,你所发送的邮件进入发送队列中,轮到你要发送的邮件时,host.com主机再联系tohost.com,将邮件传输到服务器tohost.com上。2.一些垃圾邮件的发送:在垃圾邮件中,可能大部分的发件人的地址都是假的,这是怎么回事呢?实际上在发送这些垃圾邮件的时候,这里的host.com有些特别,可能host.com不需要对用户进行认证,也可能发送垃圾邮件的人本来就控制着服务器host.com,然后控制着host.com向其他服务器,如tohost.com,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。
发送邮件主要包括3个部分:创建连接,创建邮件体,发送邮件
JavaMail中,是使用会话(Session)来管理连接的。创建一个连接,就需要创建一个会话。在会话中,有两个重要的因素,一是会话的属性,二是会话的认证。在我们使用Hotmail等邮件工具的时候,就要设置”SMTP服务器身份验证”,也就是这里的会话的认证。
首先,创建一个连接属性。
Properties props = new Properties();
props.put("mail.smtp.host","smtp.126.com"); //设置smtp的服务器地址是smtp.126.com
props.put("mail.smtp.auth","true"); //设置smtp服务器要身份验证。
在创建一个身份验证。身份验证稍微复杂一点,要创建一个Authenticator的子类,并重载 getPasswordAuthentication()方法,代码如下:
class PopupAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "cqhcp"; //126邮箱登录帐号
String pwd = "12345"; //登录密码
return new PasswordAuthentication(username, pwd);
}
}
创建身份验证的实例:
PopupAuthenticator auth = new PopupAuthenticator();
创建会话: 关于会话的创建,有两种方法,具体请参看后续的文章,这里只简单使用一种。
Session session = Session.getInstance(props, auth);
定义邮件地址:
//发送人地址
Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");
//收件人地址
Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");
//抄送地址
Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");
创建邮件体:
message.setContent("Hello", "text/plain");//或者使用message.setText("Hello");更详细的信息请参看后续文章.
message.setSubject("Title");
message.setFrom(addressFrom);
message.addRecipient(Message.RecipientType.TO,addressTo);
message.addRecipient(Message.RecipientType.CC,addressCopy);
message.saveChanges();
发送邮件的过程:
Transport transport = session.getTransport("smtp");//创建连接
transport.connect("smtp.126.com", "cqhcp", "12345");//连接服务器
transport.send(message);//发送信息
transport.close();//关闭连接
整体程序的代码如下:
class PopupAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "cqhcp"; //163邮箱登录帐号
String pwd = "12345"; //登录密码
return new PasswordAuthentication(username, pwd);
}
}
Properties props = new Properties();
props.put("mail.smtp.host","smtp.126.com");
props.put("mail.smtp.auth","true");
PopupAuthenticator auth = new PopupAuthenticator();
Session session = Session.getInstance(props, auth);
MimeMessage message = new MimeMessage(session);
Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");
Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");
Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");
message.setContent("Hello", "text/plain");//或者使用message.setText("Hello");
message.setSubject("Title");
message.setFrom(addressFrom);
message.addRecipient(Message.RecipientType.TO,addressTo);
message.addRecipient(Message.RecipientType.CC,addressCopy);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("smtp.126.com", "cqhcp", "12345");
transport.send(message);
transport.close();
若想在登录时判断输入的用户名和密码是否正确,正确时登录,不正确时提示出错而不登录,只需像下面这样实现:
try {
session.setDebug(true);
Transport trans = session.getTransport("smtp");
trans.connect("smtp.126.com",account, password);
} catch (AuthenticationFailedException ae) {
ae.printStackTrace();
DisplayToast("用户名或者密码错误!");//其中DisplayToast是我自己写的一个Toast
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex = mex.getNextException()) != null) {
ex.printStackTrace();
}
}
以下几篇文章有更加完整的实现,非常好,可以参考。
http://www.javaeye.com/topic/352753
http://www.cnblogs.com/love2009/archive/2009/02/24/1397201.html
http://www.blogjava.net/TrampEagle/archive/2006/05/26/48326.html
-
顶
- 0
-
踩
- 0
- 上一篇转职了
- 下一篇毕业以后,工作要加油了!!
android发邮件;提供了两种方式,只带的gmail发送;跟jmail发送;
javamail下载地址
http://code.google.com/p/javamail-android/downloads/list
1.自带的gmail发送,特点是方便,几句代码就搞定,但不够灵活,有局限性;
下面是使用gamil发送方式;
- <span> String[] recipients = {"目标邮箱地址1", "目标邮箱地址2(可以多个邮箱地址)"};
- String subject = "TestGmail";
- String text = "TestGmail邮件内容";
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_SEND);
- intent.setType("message/rfc822");
- intent.putExtra(Intent.EXTRA_EMAIL, recipients);
- intent.putExtra(Intent.EXTRA_SUBJECT, subject);
- intent.putExtra(Intent.EXTRA_TEXT, text);
- startActivity(intent);
- </span>
<span> String[] recipients = {"目标邮箱地址1", "目标邮箱地址2(可以多个邮箱地址)"};
String subject = "TestGmail";
String text = "TestGmail邮件内容";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, recipients);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(intent);
</span>
2.jamil发送,代码量多点,不受gamil限制;稍复杂点,灵活性高;
步骤;
1.构建邮件消息
2.建立服务器的会话
3.发送邮件
邮件消息实体类
- <span>package com.hua.guard.mail;
- import java.util.Properties;
- /**
- * 发送邮件信息
- * @author Alan
- */
- public class MailSenderInfo
- {
- //1. 发送邮件的服务器的IP和端口
- private String mailServerHost;
- private String mailServerPort = "25";
- //2.是否验证
- private boolean validate = false;
- //3.用户账户
- private String userName;
- private String password;
- //4.邮件内容信息
- private String fromAddress;
- private String toAddress;
- private String subject;
- private String content;
- // 邮件附件的文件名
- private String[] attachFileNames;
- /**
- * * 获得邮件会话属性
- */
- public Properties getProperties(){
- Properties p = new Properties();
- p.put("mail.smtp.host", this.mailServerHost);
- p.put("mail.smtp.port", this.mailServerPort);
- p.put("mail.smtp.auth", validate ? "true" : "false");
- return p;
- }
- public String getMailServerHost()
- {
- return mailServerHost;
- }
- public void setMailServerHost(String mailServerHost)
- {
- this.mailServerHost = mailServerHost;
- }
- public String getMailServerPort()
- {
- return mailServerPort;
- }
- public void setMailServerPort(String mailServerPort)
- {
- this.mailServerPort = mailServerPort;
- }
- public boolean isValidate()
- {
- return validate;
- }
- public void setValidate(boolean validate)
- {
- this.validate = validate;
- }
- public String getUserName()
- {
- return userName;
- }
- public void setUserName(String userName)
- {
- this.userName = userName;
- }
- public String getPassword()
- {
- return password;
- }
- public void setPassword(String password)
- {
- this.password = password;
- }
- public String getFromAddress()
- {
- return fromAddress;
- }
- public void setFromAddress(String fromAddress)
- {
- this.fromAddress = fromAddress;
- }
- public String getToAddress()
- {
- return toAddress;
- }
- public void setToAddress(String toAddress)
- {
- this.toAddress = toAddress;
- }
- public String getSubject()
- {
- return subject;
- }
- public void setSubject(String subject)
- {
- this.subject = subject;
- }
- public String getContent()
- {
- return content;
- }
- public void setContent(String content)
- {
- this.content = content;
- }
- public String[] getAttachFileNames()
- {
- return attachFileNames;
- }
- public void setAttachFileNames(String[] attachFileNames)
- {
- this.attachFileNames = attachFileNames;
- }
- }
- </span>
<span>package com.hua.guard.mail;
import java.util.Properties;
/**
* 发送邮件信息
* @author Alan
*/
public class MailSenderInfo
{
//1. 发送邮件的服务器的IP和端口
private String mailServerHost;
private String mailServerPort = "25";
//2.是否验证
private boolean validate = false;
//3.用户账户
private String userName;
private String password;
//4.邮件内容信息
private String fromAddress;
private String toAddress;
private String subject;
private String content;
// 邮件附件的文件名
private String[] attachFileNames;
/**
* * 获得邮件会话属性
*/
public Properties getProperties(){
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
public String getMailServerHost()
{
return mailServerHost;
}
public void setMailServerHost(String mailServerHost)
{
this.mailServerHost = mailServerHost;
}
public String getMailServerPort()
{
return mailServerPort;
}
public void setMailServerPort(String mailServerPort)
{
this.mailServerPort = mailServerPort;
}
public boolean isValidate()
{
return validate;
}
public void setValidate(boolean validate)
{
this.validate = validate;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getFromAddress()
{
return fromAddress;
}
public void setFromAddress(String fromAddress)
{
this.fromAddress = fromAddress;
}
public String getToAddress()
{
return toAddress;
}
public void setToAddress(String toAddress)
{
this.toAddress = toAddress;
}
public String getSubject()
{
return subject;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public String[] getAttachFileNames()
{
return attachFileNames;
}
public void setAttachFileNames(String[] attachFileNames)
{
this.attachFileNames = attachFileNames;
}
}
</span>
2.组装邮件信息
- <span>package com.hua.guard.mail;
- import java.util.Date;
- import java.util.Properties;
- import javax.mail.Address;
- import javax.mail.BodyPart;
- import javax.mail.Message;
- import javax.mail.Multipart;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeBodyPart;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMultipart;
- /**
- * 发送邮件 可以方式附件 html 格式 文本格式
- * @author Alan
- */
- public class MultiMailsender
- {
- /**
- * 发送文本类型邮件
- * @param mailInfo
- * @return
- */
- public boolean sendTextMail(MailSenderInfo mailInfo)
- {
- MyAuthenticator myAuthenticator = null;
- // 是否验证
- if (mailInfo.isValidate())
- {
- myAuthenticator = new MyAuthenticator(mailInfo.getUserName(),
- mailInfo.getPassword());
- }
- Properties pro = mailInfo.getProperties();
- // 根据邮件会话属性和密码验证器构造一个发送邮件的session
- Session sendMailSession = Session.getDefaultInstance(pro,
- myAuthenticator);
- // 根据session创建一个邮件消息
- try
- {
- Message mailMessage = new MimeMessage(sendMailSession);
- // 创建邮件发送者地址
- Address from = new InternetAddress(mailInfo.getFromAddress());
- // 设置邮件消息的发送者
- mailMessage.setFrom(from);
- // 创建邮件的接收者地址,并设置到邮件消息中
- Address to = new InternetAddress(mailInfo.getToAddress());
- mailMessage.setRecipient(Message.RecipientType.TO, to);
- // 设置邮件消息的主题
- mailMessage.setSubject(mailInfo.getSubject());
- // 设置邮件消息发送的时间
- mailMessage.setSentDate(new Date());
- // 设置邮件消息的主要内容
- String mailContent = mailInfo.getContent();
- mailMessage.setText(mailContent);
- // 发送邮件
- Transport.send(mailMessage);
- return true;
- }
- catch (Exception e)
- {
- e.printStackTrace();
- return false;
- }
- }
- /**
- * html文件格式的邮件
- * @param mailInfo
- * @return
- */
- public boolean sendHtmlMail(MailSenderInfo mailInfo){
- MyAuthenticator myAuthenticator = null;
- // 是否验证
- if (mailInfo.isValidate())
- {
- myAuthenticator = new MyAuthenticator(mailInfo.getUserName(),
- mailInfo.getPassword());
- }
- Properties pro = mailInfo.getProperties();
- // 根据邮件会话属性和密码验证器构造一个发送邮件的session
- Session sendMailSession = Session.getDefaultInstance(pro,
- myAuthenticator);
- // 根据session创建一个邮件消息
- try
- {
- Message mailMessage = new MimeMessage(sendMailSession);
- // 创建邮件发送者地址
- Address from = new InternetAddress(mailInfo.getFromAddress());
- // 设置邮件消息的发送者
- mailMessage.setFrom(from);
- // 创建邮件的接收者地址,并设置到邮件消息中
- Address to = new InternetAddress(mailInfo.getToAddress());
- mailMessage.setRecipient(Message.RecipientType.TO, to);
- // 设置邮件消息的主题
- mailMessage.setSubject(mailInfo.getSubject());
- // 设置邮件消息发送的时间
- mailMessage.setSentDate(new Date());
- // 设置邮件消息的主要内容
- String mailContent = mailInfo.getContent();
- // 设置邮件内容
- Multipart mainPart = new MimeMultipart();
- BodyPart html = new MimeBodyPart();
- html.setContent(mailContent, "text/html;charset=GBK");
- mainPart.addBodyPart(html);
- mailMessage.setContent(mainPart);
- //发送
- Transport.send(mailMessage);
- }catch (Exception e)
- {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- }
- </span>
<span>package com.hua.guard.mail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
* 发送邮件 可以方式附件 html 格式 文本格式
* @author Alan
*/
public class MultiMailsender
{
/**
* 发送文本类型邮件
* @param mailInfo
* @return
*/
public boolean sendTextMail(MailSenderInfo mailInfo)
{
MyAuthenticator myAuthenticator = null;
// 是否验证
if (mailInfo.isValidate())
{
myAuthenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
Properties pro = mailInfo.getProperties();
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,
myAuthenticator);
// 根据session创建一个邮件消息
try
{
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 发送邮件
Transport.send(mailMessage);
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
/**
* html文件格式的邮件
* @param mailInfo
* @return
*/
public boolean sendHtmlMail(MailSenderInfo mailInfo){
MyAuthenticator myAuthenticator = null;
// 是否验证
if (mailInfo.isValidate())
{
myAuthenticator = new MyAuthenticator(mailInfo.getUserName(),
mailInfo.getPassword());
}
Properties pro = mailInfo.getProperties();
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro,
myAuthenticator);
// 根据session创建一个邮件消息
try
{
Message mailMessage = new MimeMessage(sendMailSession);
// 创建邮件发送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 设置邮件消息的发送者
mailMessage.setFrom(from);
// 创建邮件的接收者地址,并设置到邮件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 设置邮件消息的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件消息发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件消息的主要内容
String mailContent = mailInfo.getContent();
// 设置邮件内容
Multipart mainPart = new MimeMultipart();
BodyPart html = new MimeBodyPart();
html.setContent(mailContent, "text/html;charset=GBK");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
//发送
Transport.send(mailMessage);
}catch (Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
}
</span>
3.进行发送
- <span>import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import com.hua.util.Configer;
- import com.hua.util.Constant;
- /**
- * 对外公开的方法 进行发送邮件
- * @author Alan
- *
- */
- public class SendEmailHtmLocation
- {
- /**
- * 发送html格式邮件
- */
- public static boolean sendHtmlMail(File file){
- MailSenderInfo mailInfo = new MailSenderInfo();
- mailInfo.setMailServerHost(Constant.emailServicHost);
- mailInfo.setMailServerPort(Constant.emailPort);
- mailInfo.setValidate(true);
- mailInfo.setUserName(Constant.emailUserName);
- mailInfo.setPassword(Constant.emailPwd);
- mailInfo.setFromAddress(Constant.emailUserName);
- mailInfo.setToAddress(Configer.SMS_EMAIL_ADDRESS);
- mailInfo.setSubject("test信息");
- BufferedReader br = null;
- StringBuffer sb = null;
- try{
- //将文件写成string
- FileInputStream fileInputStream = new FileInputStream(file);
- br = new BufferedReader(new InputStreamReader(fileInputStream));
- String line = null;
- sb = new StringBuffer();
- while ((line = br.readLine()) != null) {
- sb.append(line);
- }
- }catch(Exception e){
- e.printStackTrace();
- return false;
- }finally{
- if(br!=null){
- try
- {
- br.close();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- return false;
- }
- }
- }
- mailInfo.setContent(sb.toString());
- MultiMailsender sender = new MultiMailsender();
- sender.sendHtmlMail(mailInfo);
- return true;
- }
- }</span>