Android 发送邮件信息,附带附件
直接上demo代码:
MainActivity.java
package com.example.androidemaildemo;import java.util.Properties;import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart;import mail.EmailSender; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;public class MainActivity extends Activity {private Button mButton;private String to = "wardenr_sprites@foxmail.com,5448100202@qq.com";private String subject = "Application Exception for app developer";private String text = "<table align=center width=100%><tr><td align=right>邮件测试mail test</td></tr></table>";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mButton = (Button) findViewById(R.id.button1);mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubnew Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubint i = EmailSender.send(to, subject, "user return exception information to developer, please find the attached file !");System.out.println("i = " + i);}}).start();// sendEmail(); }});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);return true;}}
核心类:EmailSender.java
package mail;/** * int i = EmailSender.send(to, subject, "user return exception information to developer, please find the attached file !"); * 其中第一个参数to是发送给对方的邮箱地址,比如发送给270791800@qq.com,如果是多个邮箱,邮箱地址之间用","(英文逗号隔开) * 其中第二个参数subject是发给对方邮箱看到的邮件的title, * 其中第三个参数是邮箱的正文 */import java.io.UnsupportedEncodingException; import java.util.Properties;import javax.activation.CommandMap; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.activation.MailcapCommandMap; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart;import android.os.Environment; import android.util.Log;public class EmailSender {private static final String defaultSMTPHost = "smtp.qq.com";private static final String defaultMailFromName = "270791800@qq.com";//以这个邮箱地址的名义发送邮件,改成使用者的邮箱private static final String defaultMailFromPassword = "pake.liu";//上面那个名义上的邮件的邮箱登入密码,改成使用者的邮箱密码,我博文里给的当然是错误密码.public static int send(String mailTos, String mailSubject, String mailText) {// check paramsif (mailTos == null || mailSubject == null || mailText == null)return 0;// encoding paramsString encoding = "iso-8859-1";try {// 标题不需要编码,编码后为乱码// 正文需要编码mailText = new String(mailText.getBytes(), encoding);} catch (UnsupportedEncodingException e) {System.out.println("Fail to encoding mail text to " + encoding);}Properties props = new Properties();props.put("mail.smtp.host", defaultSMTPHost);// 邮件服务器地址props.put("mail.smtp.auth", "true");props.put("mail.smtp.user", "CTOPAY");// 发送方的发送名;props.put("mail.smtp.from", defaultMailFromName);// 发送邮箱地址;props.put("mail.debug", "false");// 不打印构建发送者信息// 构建发送者Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(defaultMailFromName,defaultMailFromPassword);}};Session session = Session.getInstance(props, auth);session.setDebug(false);// 不打印发送信息/*** 一下内容是:发送邮件时添加附件*/MimeBodyPart attachPart = new MimeBodyPart();FileDataSource fds = new FileDataSource("/sdcard/crash/exception.log"/** Environment* .* getExternalStorageDirectory* (* )* +* "/crash/exception.log"*/); // 打开要发送的文件MimeMultipart allMultipart = null;Log.i("TAGOO", "" + fds.getName());try {attachPart.setDataHandler(new DataHandler(fds));attachPart.setFileName(fds.getName());allMultipart = new MimeMultipart("mixed"); // 附件// 添加邮件正文attachPart.setContent(mailText, "text/html;charset=UTF-8"); // allMultipart.addBodyPart(attachPart); allMultipart.addBodyPart(attachPart);// 添加 } catch (MessagingException e1) {// TODO Auto-generated catch block e1.printStackTrace();}Message msg = new MimeMessage(session);int sendNum = 0;// 发送的数量for (String mailTo : mailTos.split(",")) {try {InternetAddress[] addresses = { new InternetAddress(mailTo) };msg.setRecipients(Message.RecipientType.TO, addresses);// 设置邮件接收地址集msg.setSentDate(new java.util.Date());// 设置邮件发送日期msg.setSubject(mailSubject);// 设置邮件的标题msg.setText(mailText);// 设置邮件的内容(文本) msg.setContent(allMultipart);MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");CommandMap.setDefaultCommandMap(mc);Transport.send(msg);// 发送邮件 sendNum++;// 发送记数System.out.println("Success to send email to " + mailTo);} catch (MessagingException e) {System.out.println("Fail to send email for:" + e);}}return sendNum;} }
PassAuthenticator.java
package com.example.androidemaildemo;import javax.mail.Authenticator; import javax.mail.PasswordAuthentication;public class PassAuthenticator extends Authenticator { public PasswordAuthentication getPasswordAuthentication() { /*** 这个地方需要添加上自己的邮箱的账号和密码*/String username = "账号"; String pwd = "密码"; return new PasswordAuthentication(username, pwd); } }
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:layout_marginLeft="40dp"android:layout_marginTop="31dp"android:text="Button" /></RelativeLayout>
权限如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"></uses-permission><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
转载于:https://www.cnblogs.com/MMLoveMeMM/articles/4090734.html
Android 发送邮件信息,附带附件相关推荐
- Android发送邮件到指定邮箱(可带附件)
第一种方法,调用系统的邮件软件来发送 众所周知在Android中调用其他程序进行相关处理,都是使用的Intent.当然,Email也不例外. 在 在Android中,调用Email有三种类型的Inte ...
- android+发邮件,Android发送邮件的方法实例详解
Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...
- mailto 附带附件_我和我的朋友如何将附带项目发展为每月$ 17,000的业务
mailto 附带附件 In 2014, my friends and I set out to build the best possible web design tools. We built ...
- mailto 附带附件_为什么附带项目如此重要
mailto 附带附件 by Jake Prins 杰克·普林斯(Jake Prins) 为什么附带项目如此重要 (Why side projects are so damn important) T ...
- 进阶的阿牛哥之用python向多人发送邮件(带附件)、遍历邮件获取内容(两种方法:imbox、imaplib)
(一)向多人发送邮件(带附件) 一.使用的库 这个程序涉及两个库:smtplib 和 email 这两个库都是Python自带的,所以不需要额外的下载安装. 二.思路和步骤 总体思路很简单,就像我们平 ...
- 关于php使用sendmail发送邮件时中文附件名乱码问题解决方法
问题描述:在php使用sendmail发送邮件时中文附件名出现乱码,如图: 原因分析:这是由于编码引起的错误. 解决办法:首先强制进行编码换: substr($file_name,strrpos($f ...
- iOS12系统应用发送邮件中的附件
iOS12系统应用发送邮件中的附件 iOS12系统应用发送邮件中的附件,如果发送邮件的内容很多,或者包含文档.图片等,可以以附件的形式进行发送.此时需要使用addAttachmentData(_:mi ...
- 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
文章目录 前言 一.SOCKET 网络套接字初始化 二.SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息 三.SOCKET 网络套接 向远程端 ( Android 模拟器 ) ...
- 【Android 逆向】Android 系统文件分析 ( Android 系统 root 环境准备 | 查看 Android 根目录信息 )
文章目录 一.Android 系统 root 环境准备 二.查看 Android 根目录信息 一.Android 系统 root 环境准备 需要一部 root 过的手机 , 或者直接使用带有 root ...
最新文章
- os.walk(path)遍历path下的所有目录和文件
- leetcode算法题--翻转单词顺序
- db2关闭下一句sql的日志_DB2_数据库日志管理
- 【EasyUI】DataGrid自定义排序
- 椭圆极点极线性质_笔记:关于极点极线的一些思考
- 使用C#和MSMQ开发消息处理程序
- wav pcm数据是带符号的吗_UE4 C++基础教程 - 基础数据结构
- 完美解决:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求...
- PAT 1085. PAT单位排行 (25) - 乙级
- 语音识别api_语音识别 api_免费语音识别api - 云+社区 - 腾讯云
- RDP(远程桌面很慢) slow performance, Hyper-V,IPv4 Checksum offload
- Android开发教程1~3章笔记
- SVG 学习四 基础API
- 剖析简易计算器带你入门微信小程序开发
- 嵌入式linux 中文输入法,基于嵌入式Linux的汉字输入法
- Java:Eclipse下载安装教程,以及Eclipse 安装汉化包的方法
- Linux 虚拟机内挂载 iso 文件
- 快速缓解过敏的简单技巧
- element适配svg格式图片
- codeforces1438C Engineer Artem
热门文章
- Mybatis 处理日期格式自动转换
- ztree实现节点事件
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(热身赛)
- 【服务器】宝塔LNMP安装Discuz!
- 【NOIP2009】【Vijos1752】潜伏者
- 判断参数大于0_能做条件判断的文本函数
- io 错误: socket closed_Tomcat NIO(9)IO线程Overall流程和关键类
- 将本地文件push到gitee上面
- rope 实用把一段区间的数字整体搬到序列中的一段的时候用
- excel换行按什么键_电脑黑屏按什么键恢复 电脑黑屏的原因和恢复方法