Android實現(xiàn)收到新短信后自動發(fā)郵件功能
本文實例為大家分享了Android實現(xiàn)收到新短信后自動發(fā)郵件的具體代碼,供大家參考,具體內(nèi)容如下
開發(fā)環(huán)境 Android Studio 3.2.1
首先,既然跟讀短信和發(fā)郵件有關(guān),那么就一定要相關(guān)的權(quán)限,且安裝完應(yīng)用后要手動打開相關(guān)權(quán)限…
// 接收和讀取短信 <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> // 訪問網(wǎng)絡(luò) ?<uses-permission android:name="android.permission.INTERNET" />
第二,要用到相關(guān)的庫,直接下載就行
在庫文件中添加
android {
?? ??? ?packagingOptions {
?? ??? ??? ?// 相關(guān)證明
?? ??? ??? ?pickFirst 'META-INF/LICENSE.txt'
?? ??? ?}
?? ?}
dependencies {
?? ??? ?// 相關(guān)庫
?? ? ? ?implementation 'com.sun.mail:android-mail:1.6.0'
? ? ?? ?implementation 'com.sun.mail:android-activation:1.6.0'
? ? }上源碼 :
package packageName;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.telephony.SmsMessage;
import android.text.TextUtils;
import java.util.Date;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
public class MainActivity extends AppCompatActivity ?{
? ?// 自定義廣播
? ?private BroadcastReceiver smsReceiver;
? ?// 過濾器
? ?private IntentFilter filter;
? ?// 郵箱內(nèi)容
? ?private String strContent;
? ?// 郵箱標題
? ?private String strTitle;
? ?// 消息處理器
? ?private Handler handler;
? ?@Override
? ?protected void onCreate(Bundle savedInstanceState) {
? ? ? ?super.onCreate(savedInstanceState);
? ? ? ?// 布局文件中沒啥東西
? ? ? ?setContentView(R.layout.activity_main);
? ??? ? ? // ?帥選出接受到的新短信
? ? ? ?filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
? ? ? ?// 給其最大權(quán)限
? ? ? ?filter.setPriority(Integer.MAX_VALUE);
? ??? ? ? // 一收到新消息就發(fā)送郵件
? ? ? ?handler = new Handler() {
? ? ? ? ? ?@Override
? ? ? ? ? ?public void handleMessage(Message msg) {
? ? ? ? ? ? ? ?Properties p = new Properties();
? ? ? ? ? ? ? ?// 后面寫發(fā)送人 的郵箱類型,qq 的寫 smtp.qq.com
? ? ? ? ? ? ? ?p.put("mail.smtp.host", "smtp.163.com");
? ? ? ? ? ? ? ?// mail 包下的
? ? ? ? ? ? ? ?Session session = Session.getInstance(p, null);
? ? ? ? ? ? ? ?final MimeMessage mess = new MimeMessage(session);
? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ?mess.setFrom("發(fā)送人郵箱");
? ? ? ? ? ? ? ? ? ?mess.setRecipients(javax.mail.Message.RecipientType.TO, "接收人郵箱");
? ? ? ? ? ? ? ? ? ?// 設(shè)置郵件標題,當前設(shè)置為電話號碼
? ? ? ? ? ? ? ? ? ?mess.setSubject(strTitle);
? ? ? ? ? ? ? ? ? ?// 設(shè)置短信內(nèi)容,只支持文本
? ? ? ? ? ? ? ? ? ?mess.setText(strContent);
? ? ? ? ? ? ? ? ? ?// 設(shè)置時間
? ? ? ? ? ? ? ? ? ?mess.setSentDate(new Date());
? ? ? ? ? ? ? ? ? ?// 聯(lián)網(wǎng)操作要在線程中執(zhí)行
? ? ? ? ? ? ? ? ? ?new Thread(new Runnable() {
? ? ? ? ? ? ? ? ? ? ? ?@Override
? ? ? ? ? ? ? ? ? ? ? ?public void run() {
? ? ? ? ? ? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Transport.send(mess, "接收人郵箱", "接收人郵箱的授權(quán)碼");
? ? ? ? ? ? ? ? ? ? ? ? ? ?} catch (MessagingException e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?}).start();
? ? ? ? ? ? ? ?} catch (MessagingException e) {
? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ?};
? ??? ? ? // 廣播接收到指定內(nèi)容后進行的操作
? ? ? ?smsReceiver = new BroadcastReceiver() {
? ? ? ? ? ?@Override
? ? ? ? ? ?public void onReceive(Context context, Intent intent) {
? ? ? ? ? ? ? ?Object[] objs = (Object[]) intent.getExtras().get("pdus");
? ? ? ? ? ? ? ?for (Object o : objs) {
? ? ? ? ? ? ? ? ? ?byte[] pdu = (byte[]) o;
? ? ? ? ? ? ? ? ? ?SmsMessage sms = SmsMessage.createFromPdu(pdu);
? ? ? ? ? ? ? ? ? ?// 發(fā)送人電話號碼
? ? ? ? ? ? ? ? ? ?strTitle = sms.getOriginatingAddress();
? ? ? ? ? ? ? ? ? ?// 短信內(nèi)容
? ? ? ? ? ? ? ? ? ?strContent = sms.getMessageBody();
? ??? ??? ??? ??? ? ? // 若都不為空則發(fā)送郵件
? ? ? ? ? ? ? ? ? ?if (!TextUtils.isEmpty(strContent) && !TextUtils.isEmpty(strTitle)) {
? ? ? ? ? ? ? ? ? ? ? ?handler.sendEmptyMessage(1);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ?};
? ??? ?// 開啟廣播,一定要關(guān)閉
? ? ? ?registerReceiver(smsReceiver, filter);
? ?}
? ?@Override
? ?protected void onDestroy() {
? ? ? ?super.onDestroy();
? ? ? ?// 關(guān)閉廣播
? ? ? ?unregisterReceiver(smsReceiver);
? ?}
}以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android WebView與JS交互全面詳解(小結(jié))
本篇文章主要介紹了Android WebView與JS交互全面詳解(小結(jié)),實現(xiàn)了Android客戶端與Web網(wǎng)頁交互,具有一定的參考價值,有興趣的可以了解一下2017-11-11
Android添加用戶組及自定義App權(quán)限的方法
今天小編就為大家分享一篇Android添加用戶組及自定義App權(quán)限的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Flutter實現(xiàn)自定義搜索框AppBar的示例代碼
開發(fā)中,頁面頭部為搜索樣式的設(shè)計非常常見,為了可以像系統(tǒng)AppBar那樣使用,本文將利用Flutter自定義一個搜索框,感興趣的可以了解一下2022-04-04
Android實現(xiàn)一個絲滑的自動輪播控件實例代碼
輪播圖對大家來說應(yīng)該再熟悉不過了,下面這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)一個絲滑的自動輪播控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-08-08
Android程序開發(fā)之自定義設(shè)置TabHost,TabWidget樣式
這篇文章主要介紹了Android程序開發(fā)之自定義設(shè)置TabHost,TabWidget樣式的相關(guān)資料,需要的朋友可以參考下2016-03-03
Android 自定義Dialog去除title導(dǎo)航欄的解決方法
今天小編就為大家分享一篇Android 自定義Dialog去除title導(dǎo)航欄的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Android ListView實現(xiàn)上拉加載更多和下拉刷新功能
這篇文章主要為大家詳細介紹了Android ListView實現(xiàn)上拉加載更多和下拉刷新功能,介紹了ListView刷新原理及實現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05

