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

本文实例为大家分享了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);
   }
}

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

(0)

相关推荐

  • android实现自动发送邮件

    本文实例为大家分享了实现了一个android自动发送邮件的demo.支持163,qq邮箱 需要添加activation.jar,additionnal.jar和mail.jar这三个包 首先是一个EmailSender类 import java.io.File; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileD

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

    本文实例为大家分享了Android实现收到新短信后自动发邮件的具体代码,供大家参考,具体内容如下 开发环境 Android Studio 3.2.1首先,既然跟读短信和发邮件有关,那么就一定要相关的权限,且安装完应用后要手动打开相关权限… // 接收和读取短信 <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="and

  • Python一行代码实现自动发邮件功能

    1. 用Python每天给女神发送舔狗问候 用Python自动发送最基本的邮件(主题+收件人) 知识点 邮件结构 以263企业邮为例 邮件形式 内容 最基本 收件人+主题 最常用 收件人+主题+正文 一般流程申请邮件 收件人+主题+正文+抄送 发报表邮件 收件人+主题+抄送+附件 加说明报表邮件 收件人+主题+正文+抄送+附件 Python调用zmail模块 import zmail zmail.server('danzhao@sunlands.com','password').send_mai

  • Android利用CursorLoader实现短信验证码自动填写

    概述 Android上实现短信验证码自动填写,常用的有两种方式.一种是利用BroadCastReceiver,还有一种是监听手机上短信数据库的变化.利用BroadCastReceiver来实现会在一些情况下无效,最常见的就是手机上安装了具有垃圾短信拦截功能的软件的情况下,短信验证码自动填写无效.所以,现在一般会选用监听数据库内容变化的方式来实现短信验证码自动填写. 网上对于利用监听数据库内容变化来实现短信验证码自动填写的文章也很多,主要分为一下步骤: 1. 继承ContentObserver实现

  • Android实现短信验证码自动拦截读取功能

    知识准备:  1.观察者模式的理解[文章稍后来到~~]  2.Android的Cursor使用[Android基础]  3.正则表达式使用[Java基础]  4.Handler使用[Android基础] 代码整理: MainActivity.java import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.suppo

  • Android短信验证码自动填写实现代码

    今天给大家分享一个Android短信验证码自动填写的功能.先看下效果图,我发送了一条短信到手机,自动填写验证码.如图: 这个小功能运用到了观察者模式,什么是观察者模式? 观察者模式 :定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新.在本例中,我们在短信中注册一个观察者,当短信功能(被观察者)收到信息时,就会通知我们注册的观察者.本次用到的观察者就是ContentObserver,它就是特定uri引起的

  • python自动发邮件库yagmail的示例代码

    之前使用的python的smtplib.email模块发模块的一步步骤是: 一.先导入smtplib模块  导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以126为例子百度搜索服务器是  smtp.126.com 三.写邮件主题和正文,这里的正文是HTML格式的 四.最后调用SMTP发件服务 一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text im

  • Android实现短信验证码自动填写

    android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦,因此有必要能够自动获得下发的短信验证码,方便了用户的操作,用户体验更好. 原理讲解: 主要就是实时获取短信信息.涉及到ContentObserver类的使用.使用ContentProvider来监听短信数据库的变化,在自定义的ContentObserver当中实现onChange的方法进行监听特定手机号的短信,然后进行信息截取在填

  • Android实现短信验证码自动填写功能

    本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下 实现思路很简单: 1.在需要输入验证码的Activity代码注册监听短信的广播 2.拦截短信,获取其中的验证码 3.回写到EditText private SmsReciver smsReciver = new SmsReciver(); /** 收到短信Action **/ String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED

  • Android开发之获取短信验证码后按钮背景变化并且出现倒计时

    目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮背景变化并且出现倒计时,当倒计时结束后,如果你没有获取到验证码,可以再次点击. 代码如下所示: VerCodeTimer mVerCodeTimer=(Button) findViewById(R.id.login_get_ver_code); private class VerCodeTimer extends CountDownTimer

  • Android 短信验证码自动填写

    Android 短信验证码自动填写 1.自定义Observer监听短信数据库变化(注意添加短信权限) import android.app.Activity; import android.content.ContentResolver; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import

随机推荐