IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android 邮件发送 -> 正文阅读

[移动开发]android 邮件发送

由于公司有库存,但是老板不舍得买软件,每次仓库同事出库都是手动统计设备sn号,很是麻烦。想着写个程序通过PDA实现条码识别,然后通过邮箱发送到PC端。今天简单分享下自己踩得坑

本文以163邮箱为例

1、首先需要在163邮箱中开通POP3/SMTP服务并获取授权码,

?保留好授权码、保留好授权码、保留好授权码

?下面直接上代码

2、新建一个EmailSender类

import android.app.blob.BlobStoreManager;
import java.io.File;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EmailSender {
        private Properties properties;
        private Session session;
        private Message message;
        private MimeMultipart multipart;

        public EmailSender() {
            super();
            this.properties = new Properties();
        }
        public void setProperties(String host,String post){
            //地址
            this.properties.put("mail.smtp.host",host);
            //端口号
            this.properties.put("mail.smtp.post",post);
            //是否验证
            this.properties.put("mail.smtp.auth",true);
            this.session= Session.getInstance(properties);
            this.message = new MimeMessage(session);
            this.multipart = new MimeMultipart("mixed");
        }
        /**
         * 设置收件人
         * @param receiver
         * @throws MessagingException
         */
        public void setReceiver(String[] receiver) throws MessagingException{
            Address[] address = new InternetAddress[receiver.length];
            for(int i=0;i<receiver.length;i++){
                address[i] = new InternetAddress(receiver[i]);
            }
            this.message.setRecipients(Message.RecipientType.TO, address);
        }
        /**
         * 设置邮件
         * @param from 来源
         * @param title 标题
         * @param content 内容
         * @throws AddressException
         * @throws MessagingException
         */
        public void setMessage(String from,String title,String content) throws AddressException, MessagingException{
            this.message.setFrom(new InternetAddress(from));
            this.message.setSubject(title);
            //纯文本的话用setText()就行,不过有附件就显示不出来内容了
            MimeBodyPart textBody = new MimeBodyPart();
            textBody.setContent(content,"text/html;charset=gbk");
            this.multipart.addBodyPart(textBody);
        }
        /**
         * 添加附件
         * @param filePath 文件路径
         * @throws MessagingException
         */
        public void addAttachment(String filePath) throws MessagingException{
            FileDataSource fileDataSource = new FileDataSource(new File(filePath));
            DataHandler dataHandler = new DataHandler(fileDataSource);
            MimeBodyPart mimeBodyPart = new MimeBodyPart();
            mimeBodyPart.setDataHandler(dataHandler);
            mimeBodyPart.setFileName(fileDataSource.getName());
            this.multipart.addBodyPart(mimeBodyPart);
        }
        /**
         * 发送邮件
         * @param host 地址
         * @param account 账户名
         * @param pwd 密码
         * @throws MessagingException
         */
        public void sendEmail(String host,String account,String pwd) throws MessagingException{
            //发送时间
            this.message.setSentDate(new Date());
            //发送的内容,文本和附件
            this.message.setContent(this.multipart);
            this.message.saveChanges();
            //创建邮件发送对象,并指定其使用SMTP协议发送邮件
            Transport transport=session.getTransport("smtp");
            //登录邮箱
            transport.connect(host,account,pwd);
            //发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            //关闭连接
            transport.close();
        }

}

3、下面是放在MainActivity中代码

case R.id.send:
?
??? new Thread(new Runnable() {
??????? @Override
??????? public void run() {
??????????? try {
??????????????? EmailSender sender = new EmailSender();
??????????????? //设置服务器地址和端口
??????????????? sender.setProperties("smtp.163.com", "25");
??????????????? //分别设置发件人,邮件标题和文本内容
??????????????? sender.setMessage("******@163.com", Util.getCurDateTime()+"出库统计", "设备SN !");
??????????????? //设置收件人
??????????????? sender.setReceiver(new String[]{"******@126.com"});
??????????????? //添加附件
??????????????? //这个附件的路径是我手机里的啊,需要更换成你手机里自己的路径
??????????????? sender.addAttachment( Environment.getExternalStorageDirectory()
??????????????????????? .getAbsolutePath()+ "/sendemail" + "/" +"kumai.txt");
?? ??? ??? ??? ??? ??? ?
?? ??? ??? ??? ?//下面是重点 否则程序会报
?? ??? ??? ??? ?//javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart
?? ??? ??? ??? ?//以下代码 在执行sendEmail前加上如下代码就行!
?? ??? ??? ??? ??? ??? ??
??????????????? // add handlers for main MIME types
??????????????? 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);
?? ??? ??? ??? ? //以下需要注意,下面又是一个大坑,很多说是填写你发件人邮箱的密码,其实不是 这里需要填的是邮箱授权码
?? ??? ??? ??? ? // 否则程序会报 javax.mail.AuthenticationFailedException

??????????????? //发送邮件? "smtp.163.com", "你的163邮箱账号", "邮箱授权码";
??????????????? sender.sendEmail("smtp.163.com", "******@163.com", "*********AHN");

??????????? } catch (AddressException e) {
??????????????? // TODO Auto-generated catch block
??????????????? e.printStackTrace();
??????????? } catch (MessagingException e) {
??????????????? // TODO Auto-generated catch block
??????????????? e.printStackTrace();
??????????? }
??????? }
??? }).start();
??? break;

效果展示图

?


                
        
    
 

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:18:44  更:2021-07-22 14:20:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 18:55:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码