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