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 類