Android实现收到新短信后自动发邮件功能

来自:网络
时间:2022-08-07
阅读:

本文实例为大家分享了Android实现收到新短信后自动发邮件的具体代码,供大家参考,具体内容如下

开发环境 Android Studio 3.2.1
首先,既然跟读短信和发邮件有关,那么就一定要相关的权限,且安装完应用后要手动打开相关权限…

// 接收和读取短信
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
// 访问网络
 <uses-permission android:name="android.permission.INTERNET" />

第二,要用到相关的库,直接下载就行

在库文件中添加

android {
        packagingOptions {
            // 相关证明
            pickFirst 'META-INF/LICENSE.txt'
        }
    }

dependencies {
        // 相关库
        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;
   // 邮箱内容
   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");
       // 给其最大权限
       filter.setPriority(Integer.MAX_VALUE);
          // 一收到新消息就发送邮件
       handler = new Handler() {
           @Override
           public void handleMessage(Message msg) {
               Properties p = new Properties();
               // 后面写发送人 的邮箱类型,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("发送人邮箱");
                   mess.setRecipients(javax.mail.Message.RecipientType.TO, "接收人邮箱");
                   // 设置邮件标题,当前设置为电话号码
                   mess.setSubject(strTitle);
                   // 设置短信内容,只支持文本
                   mess.setText(strContent);
                   // 设置时间
                   mess.setSentDate(new Date());
                   // 联网操作要在线程中执行
                   new Thread(new Runnable() {
                       @Override
                       public void run() {
                           try {
                               Transport.send(mess, "接收人邮箱", "接收人邮箱的授权码");
                           } catch (MessagingException e) {
                               e.printStackTrace();
                           }
                       }
                   }).start();
               } catch (MessagingException e) {
                   e.printStackTrace();
               }
           }
       };
          // 广播接收到指定内容后进行的操作
       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);
                   // 发送人电话号码
                   strTitle = sms.getOriginatingAddress();
                   // 短信内容
                   strContent = sms.getMessageBody();
                      // 若都不为空则发送邮件
                   if (!TextUtils.isEmpty(strContent) && !TextUtils.isEmpty(strTitle)) {
                       handler.sendEmptyMessage(1);
                   }
               }
           }
       };
       // 开启广播,一定要关闭
       registerReceiver(smsReceiver, filter);
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       // 关闭广播
       unregisterReceiver(smsReceiver);
   }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

返回顶部
顶部