700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android mail发送邮件(包含163邮箱及qq邮箱 使用mail.jar activation.jar additionnal.jar)

android mail发送邮件(包含163邮箱及qq邮箱 使用mail.jar activation.jar additionnal.jar)

时间:2021-03-21 23:16:31

相关推荐

android mail发送邮件(包含163邮箱及qq邮箱 使用mail.jar activation.jar additionnal.jar)

最近项目里有个发邮件的功能,不能调系统发邮件,也不能调用第三方的客户端,还必须可以发网易163邮箱,也可以发QQ邮箱。这让我想起来,当年初学java时自己写了个发送邮件的小demo,就是发给网易邮箱的,用的java 的mail.jar等实现的。

而android这个估计应该也是一样的吧,于是我就开始实现了。

首先导入三个jar包,mail.jar,activation.jar,additionnal.jar。由于当时对其他jar包印象不是很深,只导入了mail.jar,结果包了如下错误

java.lang.NoClassDefFoundError: javax.activation.DataHandler

后来导入相关jar包就可以了,也就是这三个包配齐就可以了。

一开始,我先从网易邮箱入手了,代码如下:

毕竟demo吗,大家就不要追求其他啥了,首先布局,很简单,就一个按钮

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/bt_send_mail"android:layout_width="match_parent"android:layout_height="50dp"android:text="发送邮件"/></LinearLayout>

接下来发送邮件的核心代码:

private void send() {try {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");//设置邮件服务器主机名props.setProperty("mail.host", "");// 设置邮件服务器主机名// props.setProperty("mail.host", "");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");// 设置环境信息Session session = Session.getInstance(props);// 创建邮件对象Message msg = new MimeMessage(session);msg.setSubject("AndroidMail测试");// 设置邮件内容msg.setText("这是一封由大当家发送的邮件!");// 设置发件人msg.setFrom(new InternetAddress("---发件人邮箱---"));Transport transport = session.getTransport();// 连接邮件服务器transport.connect("---发件人邮箱账号---", "---发件人邮箱密码---");// 发送邮件transport.sendMessage(msg, new Address[]{new InternetAddress("收件人邮箱")});// 关闭连接transport.close();} catch (MessagingException e) {e.printStackTrace();}}

然后在Activity中的具体使用:

public class FeedBackActivity extends BaseActivity {@BindView(R.id.bt_send_mail)Button btSendMail;private MyMailTask myMailTask;@Overrideprotected int getContentViewId() {return R.layout.activity_feed_back;}@Overrideprotected void initData(Bundle savedInstanceState) {}@OnClick(R.id.bt_send_mail)public void onViewClicked() {myMailTask=new MyMailTask();myMailTask.execute();}private void send() {try {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");//设置邮件服务器主机名props.setProperty("mail.host", "");// 设置邮件服务器主机名// props.setProperty("mail.host", "");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");// 设置环境信息Session session = Session.getInstance(props);// 创建邮件对象Message msg = new MimeMessage(session);msg.setSubject("AndroidMail测试");// 设置邮件内容msg.setText("这是一封由大当家发送的邮件!");// 设置发件人msg.setFrom(new InternetAddress("---发件人邮箱---"));Transport transport = session.getTransport();// 连接邮件服务器transport.connect("---发件人邮箱账号---", "---发件人邮箱密码---");// 发送邮件transport.sendMessage(msg, new Address[]{new InternetAddress("收件人邮箱")});// 关闭连接transport.close();} catch (MessagingException e) {e.printStackTrace();}}private class MyMailTask extends AsyncTask<Void, Void, Void> {@Overrideprotected void onPreExecute() {super.onPreExecute();btSendMail.setText("正在发送中...");}@Overrideprotected Void doInBackground(Void... voids) {send();return null;}@Overrideprotected void onPostExecute(Void aVoid) {super.onPostExecute(aVoid);btSendMail.setText("发送成功");}@Overrideprotected void onCancelled() {super.onCancelled();}}}

因为连接邮箱服务器,发邮件都是耗时操作,所以别放主线程里执行了,我这里用的AsyncTask,你用什么都行,奏是这么简单。来,我们看看有没有收到邮件

哈哈,收到了。好,一鼓作气,来实现qq邮箱。将代码里

props.setProperty("mail.host", "");

改为

props.setProperty("mail.host", "");

不就可以了吗,然后发件人,收件人邮箱换qq的。但,我是万万没想到啊,没喝大力果然不行,报错了

这是什么鬼,为什么还有链接,不管了,点下看看。原来QQ邮箱还需要SSL加密,网易的不需要,所以报错了,网上还有说用什么企业邮箱服务器,smtp.

,我实在懒得试,而且我这个就不行了吗。然后加密就加密呗,加入了如下代码

MailSSLSocketFactory msf = new MailSSLSocketFactory();msf.setTrustAllHosts(true);props.put("mail.smtp.ssl.enable", "true");props.put("mail.smtp.ssl.socketFactory", msf);

但运行又报错,又发链接,这次点开,原来是授权码。为了QQ安全,改使用授权码替代邮箱密码进行验证登录。

授权码 QQ邮箱授权码介绍 这里有相关介绍和使用我就不多说了,自己看,说的很清楚

所以QQ邮箱发送,整个代码如下:

public class FeedBackActivity extends BaseActivity {@BindView(R.id.bt_send_mail)Button btSendMail;private MyMailTask myMailTask;@Overrideprotected int getContentViewId() {return R.layout.activity_feed_back;}@Overrideprotected void initData(Bundle savedInstanceState) {}@OnClick(R.id.bt_send_mail)public void onViewClicked() {myMailTask=new MyMailTask();myMailTask.execute();}private void send() {try {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器主机名// props.setProperty("mail.host", "");// 设置邮件服务器主机名props.setProperty("mail.host", "");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");MailSSLSocketFactory msf = new MailSSLSocketFactory();msf.setTrustAllHosts(true);props.put("mail.smtp.ssl.enable", "true");props.put("mail.smtp.ssl.socketFactory", msf);// 设置环境信息Session session = Session.getInstance(props);// 创建邮件对象Message msg = new MimeMessage(session);msg.setSubject("AndroidMail测试");// 设置邮件内容msg.setText("这是一封由大当家发送的邮件!");// 设置发件人msg.setFrom(new InternetAddress("752231513@"));Transport transport = session.getTransport();// 连接邮件服务器transport.connect("752231513@", "授权码(非密码)");// 发送邮件transport.sendMessage(msg, new Address[]{new InternetAddress("收件人邮箱")});// 关闭连接transport.close();} catch (MessagingException e) {e.printStackTrace();} catch (GeneralSecurityException e) {e.printStackTrace();}}private class MyMailTask extends AsyncTask<Void, Void, Void> {@Overrideprotected void onPreExecute() {super.onPreExecute();btSendMail.setText("正在发送中...");}@Overrideprotected Void doInBackground(Void... voids) {send();return null;}@Overrideprotected void onPostExecute(Void aVoid) {super.onPostExecute(aVoid);btSendMail.setText("发送成功");}@Overrideprotected void onCancelled() {super.onCancelled();}}}

哈哈,大功告成,刚点击了按钮,桌面右下角就出现了

好了,到此发送163和QQ邮箱已经完成,希望能帮助到你们!

三个jar包的下载地址:/download/qq_30548105/9989228

本人个人原创,如有雷同,纯属巧合,或者与本人联系,做改动。请转载或者CV组合标明出处,谢谢!(如有疑问或错误欢迎指出,本人QQ:752231513)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。