日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android邮件发送详解

發(fā)布時間:2024/9/5 Android 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android邮件发送详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載:http://flysnow.iteye.com/blog/1128354

Android中我為什么發(fā)不了郵件???我手機(jī)里明明有郵件客戶端的,可我為什么不能調(diào)用它發(fā)送郵件???相信這是很多人會問的問題,手機(jī)里有Email客戶端,可是偏偏在自己的應(yīng)用里調(diào)用不了,抑或是不知道怎么調(diào)用,還有的是一直認(rèn)為自己寫對了,可是偏偏不能調(diào)用,無奈之下只能卻網(wǎng)上找段代碼粘貼上,ok,可以了。。可是你知道別人的代碼為什么可以?你知道調(diào)用Email是怎么工作的嗎?如果你又像給多人發(fā)郵件,還想發(fā)送附件,怎么做?又迷糊了吧?所以需要搞懂原理才能一通百通,舉一反三,而這就是這篇博文要寫的,也是你可以在這篇博文中學(xué)到的。

我們新建一個工程SendEmail,基于Android1.6實(shí)現(xiàn)。然后定義布局文件和代碼如下:

Xml代碼:

[html]?view plaincopy
  • <?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代碼:

    [java]?view plaincopy
  • ?/**?發(fā)送郵件測試界面?
  • ?*?*/??
  • 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,?"這是標(biāo)題");??
  • ????????data.putExtra(Intent.EXTRA_TEXT,?"這是內(nèi)容");??
  • ????????startActivity(data);??
  • ????}??
  • }??

  • 這是我們運(yùn)行應(yīng)用,點(diǎn)擊按鈕就會看到如下效果:



    ?

    ?

    分析發(fā)送代碼?

    ?

    主要的發(fā)送代碼如下:

    [java]?view plaincopy
  • Intent?data=new?Intent(Intent.ACTION_SENDTO);??
  • data.setData(Uri.parse("mailto:qq10000@qq.com"));??
  • data.putExtra(Intent.EXTRA_SUBJECT,?"這是標(biāo)題");??
  • data.putExtra(Intent.EXTRA_TEXT,?"這是內(nèi)容");??
  • startActivity(data);??

  • ?

  • ?首先構(gòu)造一個Action為SENDTO的Action
  • 其次創(chuàng)建一個Uri,他是一個mailto的郵件鏈接,也就是接收地址.
  • 再通過Intent.EXTRA_SUBJECT和Intent.EXTRA_TEXT傳遞標(biāo)題和文本的數(shù)據(jù),記住,一定要使用這些常量,這是標(biāo)準(zhǔn),否則Email客戶端不認(rèn)識,那樣你傳遞的標(biāo)題和文本就不起作用了。
  • 然后就是startActivity進(jìn)行打開,系統(tǒng)會根據(jù)Intent自動匹配找到能處理這個intent的應(yīng)用,如圖列表,有很多個,我們這里選擇網(wǎng)易掌上郵,就打開了一個郵件發(fā)送界面,如我們所愿,郵件地址、標(biāo)題和內(nèi)容都在了,很成功.
  • intent中的數(shù)據(jù)傳遞是以Extra的方式進(jìn)行put后傳遞的,然后在使用的時候getter取出使用。
  • 發(fā)送給多人以及抄送和密送

    發(fā)送給多人以及抄送和密送都很簡單,查找Intent類中的Extra常量,發(fā)送有這么三個常量:Intent.EXTRA_EMAIL,Intent.EXTRA_CC,Intent.EXTRA_BCC。這三個分別用于傳遞“接受人地址列表”、“抄送人地址列表”和“密送人地址列表”,傳遞的都是String[]類型的Email地址,如果數(shù)組中有多個地址,就可以發(fā)送給多人。發(fā)送的函數(shù)修改如下,我們看下效果:

    [java]?view plaincopy
  • 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,?"這是標(biāo)題");??
  • ????????data.putExtra(Intent.EXTRA_TEXT,?"這是內(nèi)容");??
  • ????????startActivity(data);??
  • ????}??

  • ?


    發(fā)送附件

    Email'客戶端的發(fā)送Activity提供了兩個Intent Filter,一個用于發(fā)送普通郵件,一個用戶發(fā)送帶有附件的郵件。區(qū)分很很容易的,發(fā)送普通郵件的那個Intent Filter配置的Action SENDTO,而帶有附件的郵件則是SEND,所以是2個不一樣,但是哪些比如附加“標(biāo)題”,“內(nèi)容”,“抄送”,“發(fā)送多人”等等還是通用的。布局文件新增一個按鈕,用于發(fā)送帶有附件的郵件,Activity代碼也做修改。

    ?

    [html]?view plaincopy
  • <Button??
  • ????android:id="@+id/send_to_btn"????
  • ????android:layout_width="fill_parent"???
  • ????android:layout_height="wrap_content"???
  • ????android:text="SendTo?Action"/>??

  • ?

    [java]?view plaincopy
  • ?/*?*?發(fā)送郵件測試界面?
  • ?*?@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,?"這是標(biāo)題");??
  • ????????data.putExtra(Intent.EXTRA_TEXT,?"這是內(nèi)容");??
  • ????????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,?"這是標(biāo)題");??
  • ????????data.putExtra(Intent.EXTRA_TEXT,?"這是內(nèi)容");??
  • ????????data.putExtra(Intent.EXTRA_STREAM,?Uri.parse(""));??
  • ????????data.setType("text/plain");??
  • ????????startActivity(data);??
  • ????}??
  • }??

  • 運(yùn)行應(yīng)用,我們看到效果圖里最小面的附件標(biāo)識,說明已經(jīng)可以發(fā)送附件了.


    ?

    發(fā)送附件最重要的就是Action必須為SEND,type一定要設(shè)置setType(""),還要為Intent.EXTRA_STREAM賦值,類型為Uri,一個附件的Uri。這樣才能發(fā)送附件。

    客戶端Email應(yīng)用的發(fā)送Activity配置

    ? ? ? ??? ?這是Android1.6自帶Email客戶端的配置,如下:

    ?

    [html]?view plaincopy
  • <activity??
  • ????????????android:name=".activity.MessageCompose"??
  • ????????????android:label="@string/app_name"??
  • ????????????android:enabled="false"??
  • ????????????>??
  • ????????????<intent-filter>??
  • ????????????????<action?android:name="android.intent.action.VIEW"?/>??
  • ????????????????<action?android:name="android.intent.action.SENDTO"?/>??
  • ????????????????<data?android:scheme="mailto"?/>??
  • ????????????????<category?android:name="android.intent.category.DEFAULT"?/>??
  • ????????????????<category?android:name="android.intent.category.BROWSABLE"?/>??
  • ????????????</intent-filter>??
  • ????????????<intent-filter?android:label="@string/app_name">??
  • ????????????????<action?android:name="android.intent.action.SEND"?/>??
  • ????????????????<data?android:mimeType="text/plain"?/>??
  • ????????????????<data?android:mimeType="image/*"?/>??
  • ????????????????<data?android:mimeType="video/*"?/>??
  • ????????????????<category?android:name="android.intent.category.DEFAULT"?/>??
  • ????????????</intent-filter>??
  • ????????</activity>??

  • 從以上代碼總結(jié):

    ?

  • 一個Activity定義了2個Intent Filter用于發(fā)送不同類型郵件。
  • SENDTO發(fā)送普通郵件,SEND可以發(fā)送普通和帶有附件的,不過最好主要用于發(fā)送附件。
  • 使用SENDTO時,必須為Intent設(shè)置Data,也就是Uri,內(nèi)容為"mailto:emailaddr",否則不能匹配,因?yàn)橛衧chema必須為mailto的限制
  • 使用SEND時必須要設(shè)置type,也就是使用setType()方法,type只能為以前xml定義的4個。不過我測試了text/*也可以,其他的沒測試.
  • 發(fā)送附件只能使用SEND這個Action.
  • 附加Email客戶端中提取Email地址,抄送,標(biāo)題,附件等信息的源代碼分析. [java]?view plaincopy
  • void?initFromIntent(Intent?intent)?{??
  • ??????????
  • ????????//提取接受人地址列表??
  • ????????String[]?extraStrings?=?intent.getStringArrayExtra(Intent.EXTRA_EMAIL);??
  • ????????if?(extraStrings?!=?null)?{??
  • ????????????addAddresses(mToView,?extraStrings);??
  • ????????}??
  • //提取抄送人地址列表??
  • ????????extraStrings?=?intent.getStringArrayExtra(Intent.EXTRA_CC);??
  • ????????if?(extraStrings?!=?null)?{??
  • ????????????addAddresses(mCcView,?extraStrings);??
  • ????????}??
  • //提取密送人地址列表??
  • ????????extraStrings?=?intent.getStringArrayExtra(Intent.EXTRA_BCC);??
  • ????????if?(extraStrings?!=?null)?{??
  • ????????????addAddresses(mBccView,?extraStrings);??
  • ????????}??
  • //提取標(biāo)題??
  • ????????String?extraString?=?intent.getStringExtra(Intent.EXTRA_SUBJECT);??
  • ????????if?(extraString?!=?null)?{??
  • ????????????mSubjectView.setText(extraString);??
  • ????????}??
  • ??
  • ????????//提取Uri中的接受人地址??
  • ????????final?Uri?dataUri?=?intent.getData();??
  • ????????if?(dataUri?!=?null)?{??
  • ????????????if?("mailto".equals(dataUri.getScheme()))?{??
  • ????????????????initializeFromMailTo(dataUri.toString());??
  • ????????????}?else?{??
  • ????????????????String?toText?=?dataUri.getSchemeSpecificPart();??
  • ????????????????if?(toText?!=?null)?{??
  • ????????????????????addAddresses(mToView,?toText.split(","));??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ??
  • ???????//提取郵件內(nèi)容??
  • ??????????
  • ????????CharSequence?text?=?intent.getCharSequenceExtra(Intent.EXTRA_TEXT);??
  • ????????if?(text?!=?null)?{??
  • ????????????mMessageContentView.setText(text);??
  • ????????}??
  • ??????????
  • ??????//提取附件,可以看出Action必須是SEND.EXTRA_STREAM中有數(shù)據(jù)??
  • ?????//type不能為null,這樣才能提取倒附件.??
  • ??????????
  • ????????if?(Intent.ACTION_SEND.equals(intent.getAction())?&&?intent.hasExtra(Intent.EXTRA_STREAM))?{??
  • ????????????String?type?=?intent.getType();??
  • ????????????Uri?stream?=?(Uri)?intent.getParcelableExtra(Intent.EXTRA_STREAM);??
  • ????????????if?(stream?!=?null?&&?type?!=?null)?{??
  • ????????????????if?(MimeUtility.mimeTypeMatches(type,?Email.ACCEPTABLE_ATTACHMENT_SEND_TYPES))?{??
  • ????????????????????addAttachment(stream);??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ??????????
  • ????????//?Finally?-?expose?fields?that?were?filled?in?but?are?normally?hidden,?and?set?focus??
  • ??????????
  • ????????if?(mCcView.length()?>?0)?{??
  • ????????????mCcView.setVisibility(View.VISIBLE);??
  • ????????}??
  • ????????if?(mBccView.length()?>?0)?{??
  • ????????????mBccView.setVisibility(View.VISIBLE);??
  • ????????}??
  • ????????setNewMessageFocus();??
  • ????????mDraftNeedsSaving?=?false;??
  • ????}??

    轉(zhuǎn)載于:https://www.cnblogs.com/exmyth/p/4581427.html

    總結(jié)

    以上是生活随笔為你收集整理的Android邮件发送详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。