由于公司有库存,但是老板不舍得买软件,每次仓库同事出库都是手动统计设备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;

效果展示图

android 邮件发送相关推荐

  1. Android邮件发送详解

    转载:http://flysnow.iteye.com/blog/1128354 Android中我为什么发不了邮件???我手机里明明有邮件客户端的,可我为什么不能调用它发送邮件???相信这是很多人会 ...

  2. 羊皮书APP(Android版)开发系列(十三)Android 邮件发送的实现

    在app开发过程中,邮件发送功能也是一个常见的功能,用于反馈一些app信息,严重错误等.这里使用javamail-android来实现,使用javamail-android需要下载三个jar包,分别是 ...

  3. android邮件发送几种方式

    android中发送邮件我大概发现了3种,代码如下 Java代码   package src.icetest; import org.apache.commons.mail.EmailExceptio ...

  4. android 后台邮件发送,Android邮件发送

    Android端发送邮件,比较简单,可以用于APP注册时候发送验证码什么的,需要一个用于发送邮件的邮箱,并且要将邮箱的POP3/SMTP服务开启 package tools; import andro ...

  5. android 添加附件功能,Android实现带附件的邮件发送功能

    本文实例讲解了基于基于jmail实现android邮件发送功能,分享给大家供大家参考,具体内容如下 在android上发送邮件方式: 第一种:借助gmail app客户端,缺点是必须使用gmail帐号 ...

  6. android 信息添加附件功能,Android实现带附件的邮件发送功能

    本文实例讲解了基于基于JMail实现Android邮件发送功能,分享给大家供大家参考,具体内容如下 在android上发送邮件方式: 第一种:借助GMail APP客户端,缺点是必须使用GMail帐号 ...

  7. android javamail获取邮件太多太慢_java 实现 email 邮件发送最简单优雅的方式(网易 163 为例)

    如何使用IMAP服务? 首先介绍一些邮件发送的基础知识,如果你已经知道可以跳过. 直接到 Email 邮件发送实现的部分. IMAP是什么? IMAP,即Internet Message Access ...

  8. Android语音录入与邮件发送

    2019独角兽企业重金招聘Python工程师标准>>> 关键代码如下: //语音录入 调用谷歌语音程序, 用户说完话后,将提交到云端搜索,在云端搜索完成后,返回打印数据.    // ...

  9. android javamail获取邮件太多太慢_「Java」 - SpringBoot amp; 邮件发送

    发送邮件是web应用系统的必备功能之一,用于用户注册验证.忘记密码找回或者发送营销信息.最早期使用JavaMail相关API写发送邮件的相关代码,后来Spring推出了JavaMailSender简化 ...

最新文章

  1. Java基础-数据类型int,short,char,long,float,double,boolean,byte
  2. 【大学课程】操作系统知识点
  3. VTK:Arbitrary3DCursor用法实战
  4. SAP S/4HANA product search implementation debug in backend
  5. 首个JDK 10(18.3)发行候选版(内部版本43)展示了新的版本控制方案
  6. mongo基本使用方法
  7. 前端学习(2161):vuecli项目得目录结构解析
  8. vue+Java后端进行调试时如何解决跨域问题
  9. 表单html遇到的问题及处理,Web前端开发中常见问题及解决方案
  10. C语言 汉字ASCII转Unicode
  11. SSM框架Web程序的流程(Spring SpringMVC Mybatis)
  12. 电影社交网络中Facemash女生评比算法Java实现
  13. http://www.jb51.net/article/84149.htm
  14. 用c语言实现文本文件中的字符筛选分析(二)
  15. Vue父组件与子组件传递事件/调用事件
  16. pyaudio录制音频和播放音频
  17. 利用点赞功能提升Linkedin账号曝光率和活跃度
  18. 银行家算法—简单易懂解题思路
  19. 【图解HTTP】返回结果的HTTP状态码
  20. 实录:有钱女性私生活

热门文章

  1. input输入框模拟验证码输入效果
  2. microk8s helm2 Error: no available release name found
  3. 慕课网的python2020_2020中.国大学慕课Python开发入门答案
  4. 微信SDK开发学习第一课
  5. 全渠道会员通-天猫会员通1: 开通教程
  6. 如何使用 Go 语言重新思考可视化编程?
  7. 大型超市购物车蓝牙智能锁解决方案
  8. [内存管理]内存池pool库
  9. 使用HLK7628N碰到的一些问题
  10. 数字图像处理|Matlab-基于颜色的车牌识别程序