时间:2022-07-11 10:13:40 | 栏目: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); } }