如何在自定义邮件发件人中从文件浏览器和相机传递附件 [英] How to pass attachment from file browser and camera in a custom mail sender

查看:27
本文介绍了如何在自定义邮件发件人中从文件浏览器和相机传递附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用了一个教程来实现自定义电子邮件发件人,

I have used a tutorial to implement a custom email sender,

现在我有这个代码

   try {
      m.addAttachment("/sdcard/filelocation");

      if(m.send()) {
        Toast.makeText(Comunic.this, "Ok", Toast.LENGTH_LONG).show();
      } else {
        Toast.makeText(Comunic.this, "Error.", Toast.LENGTH_LONG).show();
      }
    } catch(Exception e) {
      Toast.makeText(Comunic.this, "Error.", Toast.LENGTH_LONG).show();
    } 

并且需要传入

m.addAttachment("/sdcard/filelocation");

从文件浏览器中选择的文件或照片(根据用户选择).

a file selected from the file browser or a photo(according the users choice).

我该怎么做?

m 是一个 Mail Object

Mail m = new Mail(username, password);

邮件类是

    public class Mail extends javax.mail.Authenticator {
      private String _user;
      private String _pass;

      private String[] _to;
      private String _from;

      private String _port;
      private String _sport;

      private String _host;

      private String _subject;
      private String _body;

      private boolean _auth;

      private boolean _debuggable;

      private Multipart _multipart;


      public Mail() {
        _host = "smtp.gmail.com"; // default smtp server
        _port = "465"; // default smtp port
        _sport = "465"; // default socketfactory port

        _user = ""; 
        _pass = "";
        _from = ""; // email sent from
        _subject = ""; // email subject
        _body = ""; // email body

        _debuggable = false; // debug mode on or off - default off
        _auth = true; // smtp authentication - default on

        _multipart = new MimeMultipart();

        // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
        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);
      }



      public Mail(String user, String pass) {
        this();

        _user = user;
        _pass = pass;
      }

      public boolean send() throws Exception {
        Properties props = _setProperties();

        if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {
          Session session = Session.getInstance(props, this);

          MimeMessage msg = new MimeMessage(session);

          msg.setFrom(new InternetAddress(_from));

          InternetAddress[] addressTo = new InternetAddress[_to.length];
          for (int i = 0; i < _to.length; i++) {
            addressTo[i] = new InternetAddress(_to[i]);
          }
            msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);

          msg.setSubject(_subject);
          msg.setSentDate(new Date());

          // setup message body
          BodyPart messageBodyPart = new MimeBodyPart();
          messageBodyPart.setText(_body);
          _multipart.addBodyPart(messageBodyPart);

          // Put parts in message
          msg.setContent(_multipart);

          // send email
          Transport.send(msg);

          return true;
        } else {
          return false;
        }
      }


  public void addAttachment(String filename) throws Exception {
    BodyPart messageBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(filename);
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);

    _multipart.addBodyPart(messageBodyPart);
  }

  @Override
  public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(_user, _pass);
  }

  private Properties _setProperties() {
    Properties props = new Properties();

    props.put("mail.smtp.host", _host);

    if(_debuggable) {
      props.put("mail.debug", "true");
    }

    if(_auth) {
      props.put("mail.smtp.auth", "true");
    }

    props.put("mail.smtp.port", _port);
    props.put("mail.smtp.socketFactory.port", _sport);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

    return props;
  }



      public String getBody() {
        return _body;
      }


      public String getFrom() {
            return _from;
      }


      public String[] getTo() {
            return _to;
      }


      public String getSubject() {
            return _subject;
      }


      public void setBody(String _body) {
        this._body = _body;
      }


      public void setFrom(String _from) {
            this._from = _from;
      }


      public void setTo(String[] _to) {
            this._to = _to;
      }


      public void setSubject(String _subject) {
            this._subject = _subject;
      }



    }

推荐答案

检查你发送的文件路径/mnt/sdcard/mnt/sdcard/AAAAAA/readme.txt.

Check the file path you are sending /mnt/sdcard/mnt/sdcard/AAAAAA/readme.txt.

/mnt/sdcard/ 重复了两次..

这篇关于如何在自定义邮件发件人中从文件浏览器和相机传递附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆