问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android中我为什么发不了邮件

发布网友 发布时间:2022-04-29 23:56

我来回答

3个回答

热心网友 时间:2022-06-26 14:07

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:qq10000@qq.com"));
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:qq10000@qq.com"));
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:qq10000@qq.com"));
data.putExtra(Intent.EXTRA_EMAIL, new String[]{"ls8707@163.com","ls8708@163.com"});
data.putExtra(Intent.EXTRA_CC, new String[]{"ls8709@163.com"});
data.putExtra(Intent.EXTRA_BCC, new String[]{"ls810@163.com"});
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:qq10000@qq.com"));
data.putExtra(Intent.EXTRA_EMAIL, new String[]{"ls8707@163.com","ls8708@163.com"});
data.putExtra(Intent.EXTRA_CC, new String[]{"ls8709@163.com"});
data.putExtra(Intent.EXTRA_BCC, new String[]{"ls810@163.com"});
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[]{"ls8707@163.com"});
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
data.putExtra(Intent.EXTRA_STREAM, Uri.parse(""));
data.setType("text/plain");
startActivity(data);
}
}
运行应用,我们看到效果图里最小面的附件标识,说明已经可以发送附件了.

热心网友 时间:2022-06-26 14:07

关于如何解决Android发邮件问题;一下实例展现供参考:
package lius.javamail.ssl;

import java.io.UnsupportedEncodingException;

import java.security.*;

import java.util.Properties;

import javax.mail.*;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeUtility;

/**

* 用于收取Gmail邮件

* @author Winter Lau

*/

public class GmailFetch {

public static void main(String argv[]) throws Exception {

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

// Get a Properties object

Properties props = System.getProperties();

props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);

props.setProperty("mail.pop3.socketFactory.fallback", "false");

props.setProperty("mail.pop3.port", "995");

props.setProperty("mail.pop3.socketFactory.port", "995");

//以下步骤跟一般的JavaMail操作相同

Session session = Session.getDefaultInstance(props,null);

//请将红色部分对应替换成你的邮箱帐号和密码

URLName urln = new URLName("pop3","pop.gmail.com",995,null,

"[邮箱帐号]", "[邮箱密码]");

Store store = session.getStore(urln);

Folder inbox = null;

try {

store.connect();

inbox = store.getFolder("INBOX");

inbox.open(Folder.READ_ONLY);

FetchProfile profile = new FetchProfile();

profile.add(FetchProfile.Item.ENVELOPE);

Message[] messages = inbox.getMessages();

inbox.fetch(messages, profile);

System.out.println("收件箱的邮件数:" + messages.length);

for (int i = 0; i < messages.length; i++) {

//邮件发送者

String from = decodeText(messages[i].getFrom()[0].toString());

InternetAddress ia = new InternetAddress(from);

System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');

//邮件标题

System.out.println("TITLE:" + messages[i].getSubject());

//邮件大小

System.out.println("SIZE:" + messages[i].getSize());

//邮件发送时间

System.out.println("DATE:" + messages[i].getSentDate());

}

} finally {

try {

inbox.close(false);

} catch (Exception e) {}

try {

store.close();

} catch (Exception e) {}

}

}

protected static String decodeText(String text)

throws UnsupportedEncodingException {

if (text == null)

return null;

if (text.startsWith("=?GB") || text.startsWith("=?gb"))

text = MimeUtility.decodeText(text);

else

text = new String(text.getBytes("ISO8859_1"));

return text;

}

}

2. [代码]GmailSender.java 跳至 [1] [2] [全屏预览]

package lius.javamail.ssl;

import java.security.Security;

import java.util.Date;

import java.util.Properties;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

/**

* 使用Gmail发送邮件

* @author Winter Lau

*/

public class GmailSender {

public static void main(String[] args) throws AddressException,
MessagingException {

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

// Get a Properties object

Properties props = System.getProperties();

props.setProperty("mail.smtp.host", "smtp.gmail.com");

props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);

props.setProperty("mail.smtp.socketFactory.fallback", "false");

props.setProperty("mail.smtp.port", "465");

props.setProperty("mail.smtp.socketFactory.port", "465");

props.put("mail.smtp.auth", "true");

final String username = "[邮箱帐号]";

final String password = "[邮箱密码]";

Session session = Session.getDefaultInstance(props, new
Authenticator(){

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(username, password);

}});

// -- Create a new message --

Message msg = new MimeMessage(session);

// -- Set the FROM and TO fields --

msg.setFrom(new InternetAddress(username + "@mo168.com"));

msg.setRecipients(Message.RecipientType.TO,

InternetAddress.parse("[收件人地址]",false));

msg.setSubject("Hello");

msg.setText("How are you");

msg.setSentDate(new Date());

Transport.send(msg);

System.out.println("Message sent.");

}

}

热心网友 时间:2022-06-26 14:08

装个三方的邮件
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 喉咙被花生壳卡住怎么办 下巴上长痘痘是身体哪里不好啊 下巴长痘痘是因为什么 剥花生可以锻炼幼儿的什么 下巴总长痘痘是身体哪里有问题 母猫做绝育大概多少钱 大量花生壳怎么剥 脸上下巴总是长痘痘?是身体的哪里出现问题了呢 快速包花生壳的方法 猫做绝育要多少钱? 生活小妙招如何更快剥开花生壳手不疼 花生壳怎么剥的快 下巴长痘痘是什么问题引起 怎么巧剥花生壳? 下巴长痘是身体哪的健康出了问题 ebay摩配兼容性表格应该怎么选 vivo手机助手安在手机上却连接电脑说版本不一样 下巴为什么会长痘? 如何快速剥去花生壳 03版EXCEL保存时出现兼容性问题,复制到新表,却出现了一个兼容性报表。错点了保存,如何找回之前文档 波斯龙虾一只大约有多重l 发送者发送邮件功能被禁止,什么意思 如何阻止发送外部邮件》 一斤小龙虾的热量 win7电脑底部显示栏如何让文件夹不显示路径而显示文件夹名字 否则会非常的不方便 求解决!(有图) 如何修改任务栏上显示的文件夹名字 打开桌面上的文件夹时任务栏上显示的是完整的路径名称而不是文件夹名称 在电脑打开多个窗口,任务栏显示的是文件夹的路径,怎么调整显示成文件夹的名字? jQuery文字无缝滚动 任务栏怎么设置资源管理器只显示当前文件夹名 任务栏里面显示一长长一串太麻烦了 根本不知道是哪个文件夹 求html高手。用marquee滚动播放图片,如何使一开始不出现空白,最后一幅... 怎么更改文件夹在任务栏上的显示名称? 任务栏上的文件夹的名字,把c:&#92;.....去掉,只显示文件夹名字,如何操作? JavaScript 控制Marquee无缝滚动的原理是什么呀 Win7的任务栏如何设置文件夹以列表显示 向高手请教,为什么我电脑上任务栏上文件夹的名字显示显示为路径名? win7任务栏的窗口显示从文件夹变成了只显示标题,怎么变回来 如何实现jquery滚动条间隔滚动 文字间隔向上滚动效果示例 目前WIN7系统底部的任务栏里边文件夹显示的是链接名字,要如何才能改为文件夹名? marquee li向上滚动效果求助