android邮件
1. Android中我为什么发不了邮件
Android中我为什么发不了邮件???我手机里明明有邮件客户端的,可我为什么不能调用它发送邮件???相信这是很多人会问的问题,手机里有Email客户端,可是偏偏在自己的应用里调用不了,抑或是不知道怎么调用,还有的是一直认为自己写对了,可是偏偏不能调用,无奈之下只能却网上找段代码粘贴上,ok,可以了。。可是你知道别人的代码为什么可以?你知道调用Email是怎么工作的吗?如果你又像给多人发邮件,还想发送附件,怎么做?又迷糊了吧?所以需要搞懂原理才能一通百通,举一反三,而这就是这篇博文要写的,也是你可以在这篇博文中学到的。
在这里你可以学到:
什么是Intent和Intent Fileter
如何发送Email
如何发送特定的标题和内容的Emil
如何发送给多人
如何抄送和密送
如何发送附件
一:什么是Intent和Intent Fileter
关于这个详细介绍请参考 :
Android系列教程之十:Intents and Intent Filters(一)
Android系列教程之十一:Intents and Intent Filters(二)
Android系列教程之十二:Intents and Intent Filters(三)
二:如何发送Email
通过上面就会知道Android应用之间的通信是通过Intent这个东西,如果手机中有实现了你想要功能的应用那么你就不用麻烦去实现一个拉。直接使用就可以,比如这里的发送邮件。
我们新建一个工程SendEmail,基于Android1.6实现。然后定义布局文件和代码如下:
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/send_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Send Action"
/>
</LinearLayout>
java代码
/** 发送邮件测试界面
* @author 飞雪无情 个人博客:http://flysnow.iteye.com/
* @since 2011-7-19
*/
public class SendEmailActivity extends Activity implements View.OnClickListener{
private Button mSendBtn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSendBtn=(Button)findViewById(R.id.send_btn);
mSendBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.send_btn:
startSendEmailIntent();
break;
}
}
private void startSendEmailIntent(){
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
}
}
这是我们运行应用,点击按钮就会看到如下效果:
三:分析发送代码
主要的发送代码如下:
Java代码
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
首先构造一个Action为SENDTO的Action
其次创建一个Uri,他是一个mailto的邮件链接,也就是接收地址.
再通过Intent.EXTRA_SUBJECT和Intent.EXTRA_TEXT传递标题和文本的数据,记住,一定要使用这些常量,这是标准,否则Email客户端不认识,那样你传递的标题和文本就不起作用了。
然后就是startActivity进行打开,系统会根据Intent自动匹配找到能处理这个intent的应用,如图列表,有很多个,我们这里选择网易掌上邮,就打开了一个邮件发送界面,如我们所愿,邮件地址、标题和内容都在了,很成功.
intent中的数据传递是以Extra的方式进行put后传递的,然后在使用的时候getter取出使用。
四:发送给多人以及抄送和密送
发送给多人以及抄送和密送都很简单,查找Intent类中的Extra常量,发送有这么三个常量:Intent.EXTRA_EMAIL,Intent.EXTRA_CC,Intent.EXTRA_BCC。这三个分别用于传递“接受人地址列表”、“抄送人地址列表”和“密送人地址列表”,传递的都是String[]类型的Email地址,如果数组中有多个地址,就可以发送给多人。发送的函数修改如下,我们看下效果:
Java代码
private void startSendEmailIntent(){
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]","[email protected]"});
data.putExtra(Intent.EXTRA_CC, new String[]{"[email protected]"});
data.putExtra(Intent.EXTRA_BCC, new String[]{"[email protected]"});
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
}
五,发送附件
Email'客户端的发送Activity提供了两个Intent Filter,一个用于发送普通邮件,一个用户发送带有附件的邮件。区分很很容易的,发送普通邮件的那个Intent Filter配置的Action SENDTO,而带有附件的邮件则是SEND,所以是2个不一样,但是哪些比如附加“标题”,“内容”,“抄送”,“发送多人”等等还是通用的。布局文件新增一个按钮,用于发送带有附件的邮件,Activity代码也做修改。
Xml代码
<Button
android:id="@+id/send_to_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="SendTo Action"/>
Java代码
/* * 发送邮件测试界面
* @author 飞雪无情 个人博客:http://flysnow.iteye.com/
* @since 2011-7-19
*/
public class SendEmailActivity extends Activity implements View.OnClickListener{
private Button mSendBtn;
private Button mSendToBtn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSendBtn=(Button)findViewById(R.id.send_btn);
mSendToBtn=(Button)findViewById(R.id.send_to_btn);
mSendBtn.setOnClickListener(this);
mSendToBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.send_btn:
startSendEmailIntent();
break;
case R.id.send_to_btn:
startSendToEmailIntent();
break;
}
}
private void startSendEmailIntent(){
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]","[email protected]"});
data.putExtra(Intent.EXTRA_CC, new String[]{"[email protected]"});
data.putExtra(Intent.EXTRA_BCC, new String[]{"[email protected]"});
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
}
private void startSendToEmailIntent(){
Intent data=new Intent(Intent.ACTION_SEND);
data.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
data.putExtra(Intent.EXTRA_STREAM, Uri.parse(""));
data.setType("text/plain");
startActivity(data);
}
}
运行应用,我们看到效果图里最小面的附件标识,说明已经可以发送附件了.
2. 怎么用android手机发送袋附件的邮件
在android上发送邮件方式:
第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便
不需要写很多代码,但是不是很灵活。
第二种:基于JMail实现,可以很灵活的自己设置各种属性,不需要GMail帐号
在第二种方式的实现之前,看一下JMail对EMail结构的划分:
基于SMTP协议发送EMail,所以客户端必须要知道SMTP的主机
腾讯邮件的SMTP主机为:stmp.qq.com端口为465基于SSL协议
最后我做了一个简单的封装,把发送文本加图像附件的功能做出了
一个单独的Class,只要调用一下即可完成:
[java] view plain
package com.gloomyfish.jmail.demo;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
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;
public class EMailSender {
private String host;
private String port;
private String userName;
private String password;
private String[] images;
public String[] getImagePath() {
return images;
}
public void setImagePath(String[] imagePath) {
this.images = imagePath;
}
public EMailSender(String host, String port, String userName, String password)
{
this.host = host;
this.port = port;
this.userName = userName;
this.password = password;
}
public void sendEmail(String subject, String recepits, String sender, String content)
{
Properties props = new Properties();
props.put("mail.smtp.host", host); //设置smtp的服务器地址
// props.put("mail.smtp.starttls.enable", "true");
// props.put("mail.smtp.port", port); // 设置端口
// props.put("mail.smtp.auth", "true"); //设置smtp服务器要身份验证。
props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", port);
// 返回授权Base64编码
PopupAuthenticator auth = new PopupAuthenticator(userName, password);
// 获取会话对象
Session session = Session.getInstance(props, auth);
// 设置为DEBUG模式
session.setDebug(true);
// 邮件内容对象组装
MimeMessage message = new MimeMessage(session);
try
{
Address addressFrom = new InternetAddress(sender, "Jia Zhi Gang");
Address addressTo = new InternetAddress(recepits, "My QQ E-Mail");
message.setSubject(subject);
message.setSentDate(new Date());
message.setFrom(addressFrom);
message.addRecipient(Message.RecipientType.TO,addressTo);
// 邮件文本/HTML内容
Multipart multipart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(content, "text/html");
multipart.addBodyPart(messageBodyPart);
// 添加邮件附件
if (images != null && images.length > 0) {
for (String filePath : images) {
MimeBodyPart attachPart = new MimeBodyPart();
DataSource source = new FileDataSource(filePath);
attachPart.setDataHandler(new DataHandler(source));
attachPart.setFileName(filePath);
multipart.addBodyPart(attachPart);
}
}
// 保存邮件内容
message.setContent(multipart);
// 获取SMTP协议客户端对象,连接到指定SMPT服务器
Transport transport = session.getTransport("smtp");
transport.connect(host, Integer.parseInt(port), userName, password);
System.out.println("connet it success!!!!");
// 发送邮件到SMTP服务器
Thread.currentThread().setContextClassLoader( getClass().getClassLoader() );
Transport.send(message);
System.out.println("send it success!!!!");
// 关闭连接
transport.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
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;
}
}
用户授权类:
[java] view plain
package com.gloomyfish.jmail.demo;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
class PopupAuthenticator extends Authenticator {
private String userName;
private String password;
public PopupAuthenticator(String userName, String password)
{
this.userName = userName;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
3. android 怎么样实现自动发送邮件
如果使用浏览器进入邮箱,选择记住密码,并在浏览器中设置不要清除浏览数据和cookie;
下载邮箱客户端,输入密码账号并选择记住密码账号并自动登录即可。
4. android接收邮件服务器邮件如何设置
1、在手机上找到“邮件”应用程序
2、打开,出现“添加账号
3、选择账号类型为“POP3POP”
4、“添加用户”,输入邮箱地址、用户名以及邮箱显示名
5、点击“完成”或“下一步”,出现接收服务器的配置选项
注意(使用默认设置,安全类型不要勾选SSL(若需要SSL请联系公司管理员确认是否邮件服务器已经安装SSL服务器安全证书)
6、点击“完成”或“下一步”,出现接收服务器的配置选项
7、输入信息,填写完成后,点击右上角的“下一步”按钮即可,最后检查核对以上配置是否正确
8、设置完成,回到首页菜单,点击刷新,或接受邮件,进行邮件的收发
5. 如何在安卓Android手机上使用outlook软件发企业Exchange邮件
安卓机是直接可以在设置中添加Exchange账户的,不过需要安装安卓版Exchange,步骤如下:
在安卓手机主界面中点击“设置”
在“设置”界面中点击“帐户与同步”
在“帐户与同步”界面中点击“添加账户”
在“添加Exchange帐户”界面中输入邮件地址和密码,点击“下一步”
在检索到帐户信息后,如果出现“服务器设置”界面,则按提示输入邮件帐户信息后点击“下一步”,否则会直接跳至第6步
域名用户名:完整的用户名
密码 :域帐户对应的域密码
服务器 :邮件服务器对应的地址,一般为mail.******.com在检查接收服务器设置后,会弹出一个“远程安全管理”的警告界面,点击“确定”
在“帐户选项”界面中可以进行常用的“收件箱检查频率”、“要同步的数量”、是否同步联系人/日历等设置。设置完毕后点击“下一步”
在“设置电子邮件”界面中为帐户任意创建一个名称后点击“完成”
在“要激活设备管理器吗?”界面中点击“激活”
至此可以看到刚才配置的帐户同步功能已开启
如果还需要额外设置可以点击该帐户,点击“帐户设置”,进行设置的微调,比如“要同步的数量”、“签名”等
至此整个配置过程完成,回到安卓手机主界面,点击“发送电子邮件”就可以看到收件箱中已经出现公司邮箱中的邮件了
6. Android开发中怎样调用系统Email发送邮件
在Android中,调用Email有三种类型的Intent: Intent.ACTION_SENDTO 无附件的发送 Intent.ACTION_SEND 带附件的发送 Intent.ACTION_SEND_MULTIPLE 带有多附件的发送 当然,所谓的调用Email,只是说Email可以接收Intent并做这些事情,可能也有其他的应用程序实现了相关功能,所以在执行的时候,会出现选择框进行选择。 1.使用SENTTO发送
Intent data=new Intent(Intent.ACTION_SENDTO); data.setData(Uri.parse("mailto:[email protected]")); data.putExtra(Intent.EXTRA_SUBJECT, "这是标题"); data.putExtra(Intent.EXTRA_TEXT, "这是内容"); startActivity(data); Intent data=new Intent(Intent.ACTION_SENDTO); data.setData(Uri.parse("mailto:[email protected]")); data.putExtra(Intent.EXTRA_SUBJECT, "这是标题"); data.putExtra(Intent.EXTRA_TEXT, "这是内容"); startActivity(data);
通过向Intent中putExtra来设定邮件的相关参数。 2.使用SEND发送
Intent intent = new Intent(Intent.ACTION_SEND); String[] tos = { "[email protected]" }; String[] ccs = { "[email protected]" }; String[] bccs = {"[email protected]"}; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_BCC, bccs); intent.putExtra(Intent.EXTRA_TEXT, "body"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///mnt/sdcard/a.jpg")); intent.setType("image/*"); intent.setType("message/rfc882"); Intent.createChooser(intent, "Choose Email Client"); startActivity(intent); Intent intent = new Intent(Intent.ACTION_SEND); String[] tos = { "[email protected]" }; String[] ccs = { "[email protected]" }; String[] bccs = {"[email protected]"}; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_BCC, bccs); intent.putExtra(Intent.EXTRA_TEXT, "body"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///mnt/sdcard/a.jpg")); intent.setType("image/*"); intent.setType("message/rfc882"); Intent.createChooser(intent, "Choose Email Client"); startActivity(intent);
很简单,发送邮件中,有收件者,抄送者,密送者。 也就是分别通过 Intent.EXTRA_EMAIL, Intent.EXTRA_CC, Intent.EXTRA_BCC 来进行putExtra来设定的,而单个附件的发送,则使用Intent.EXTRA_STREAM来设置附件的地址Uri。 3.使用SEND_MULTIPLE来进行多附件的发送
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); String[] tos = { "[email protected]" }; String[] ccs = { "[email protected]" }; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_TEXT, "body"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); ArrayList<uri> imageUris = new ArrayList<uri>(); imageUris.add(Uri.parse("file:///mnt/sdcard/a.jpg")); imageUris.add(Uri.parse("file:///mnt/sdcard/b.jpg")); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); intent.setType("image/*"); intent.setType("message/rfc882"); Intent.createChooser(intent, "Choose Email Client"); startActivity(intent); Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); String[] tos = { "[email protected]" }; String[] ccs = { "[email protected]" }; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_TEXT, "body"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); ArrayList<uri> imageUris = new ArrayList<uri>(); imageUris.add(Uri.parse("file:///mnt/sdcard/a.jpg")); imageUris.add(Uri.parse("file:///mnt/sdcard/b.jpg")); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); intent.setType("image/*"); intent.setType("message/rfc882"); Intent.createChooser(intent, "Choose Email Client"); startActivity(intent);
发送多个附件,最主要的时候,通过putParcelableArrayListExtra将多个附件的Uri地址List设置进去就OK了。其实还是很简单的。
7. android怎样不打开系统浏览器实现了发送邮件
下载javamail的java包,加入到你项目的库中。
2.修改你的邮箱设置,这里以163邮箱为例。打开设置,开启客户端授权码,记住这个授权码,然后打开POP3/SMTP服务和IMAP/SMTP服务。
输入相应的代码(私我给你发)
在使用该库前先简单介绍一下 Email for Android 2.3.2 中四个核心的类和相关的方法。
EmailConfig 类
setAccount( ):设置发信人的邮箱(必写)
setPassword( ) :设置发信人的邮箱密码或授权码(必写)
setSmtpHost( ):设置SMTP服务器地址(发送邮件时必写)
setSmtpPort( ):设置SMTP服务器端口(发送邮件时必写)
setPopHost( ):设置POP服务器地址(接收邮件时必写)
setPopPort( ):设置POP服务器端口(接收邮件时必写)
setImapHost:设置IMAP服务器地址(接收邮件时必写)
setImapPort:设置IMAP服务器端口(接收邮件时必写)
setTo( ):设置收信人邮箱(必写)
setCc( ):设置抄送人
setBcc( ):设置密送人
setNickname( ):设置发信人昵称
setSubject( ):设置邮件主题(必写)
setText( ):设置文本型的邮件内容(必写,但 setText( ) 和 setContent( ) 只能二选一)
setContent( ):设置HTML型的邮件内容(同上)
sendAsyn( ):异步发送邮件(必写)
popReceiveAsyn( ):使用POP3协议异步接收邮件
imapReceiveAsyn( ):使用IMAP协议异步接收邮件
connectServer( ):检查邮件服务器配
EmailSendClient 类
EmailReceiveClient 类
EmailExamine 类