android:自动发送邮件

时间:2011-10-08 17:36:28

标签: android file email

首先抱歉我的英语。我需要制作应用程序 自动从SD卡发送文件。我以为我会这样做 它通过电子邮件。我编写了发送电子邮件的代码

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
public class EmailActivity extends Activity { 
        /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
    } 
    public void poslat(View button) { 
        Intent i = new Intent(android.content.Intent.ACTION_SEND); 
                String Email[] = { "a@aa.aa" }; 
                i.putExtra(android.content.Intent.EXTRA_EMAIL, Email); 
                i.putExtra(android.content.Intent.EXTRA_SUBJECT, "Tu bude datum"); 
                i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/lala/ 
lala.txt")); 
                i.setType("plain/text"); 
                startActivity(i); 
        } 
}

效果很好,但我觉得它无法配置为发送 自动。我怎么开始?或者你知道怎么做 自动从SD卡发送文件?例如。通过FTP或其他东西 其他? ..非常感谢你


我有这个代码

Mail.java

package mail.mail;

import java.util.Date; 
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.Multipart; 
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; 


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 = ""; // username 
    _pass = ""; // password 
    _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; 
  } 

  // the getters and setters 
  public String getBody() { 
    return _body; 
  } 

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

  public String getSubject() { 
        return _subject; 
      } 

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

  public String getFrom() { 
        return _from; 
      } 
  public void setFrom(String _from) { 
        this._from = _from; 
      } 
  public String[] getTO() { 
        return _to; 
      } 
  public void setTo(String[] _to) { 
        this._to = _to; 
      } 
  // more of the getters and setters ….. 


} 

lala.java

package mail.mail;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class lala extends Activity{
    @Override 
    public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.main); 

      Button addImage = (Button) findViewById(R.id.send_email); 
      addImage.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
          Mail m = new Mail("aa@gmail.com", "aa"); 

          String[] toArr = {"aaa@centrum.sk"}; 
          m.setTo(toArr); 
          m.setFrom("aa@gmail.com"); 
          m.setSubject("This is an email sent using my Mail JavaMail wrapper from an Android device."); 
          m.setBody("Email body.");

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



          } catch(Exception e) { 
            //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show(); 
            Log.e("MailApp", "Could not send email", e); 
          } 
        } 
      }); 
    } 

}

这里有什么问题?.. = //

3 个答案:

答案 0 :(得分:2)

如果您希望在没有用户互动的情况下发送电子邮件,则可以使用SMTP协议和外部邮件服务器

答案 1 :(得分:0)

您的问题不明确......您是否只是希望应用发送电子邮件而无需用户按下按钮?更有可能的是,我猜你会问到Android的后台服务功能,你的应用程序按计划运行,并在没有用户交互的情况下发送电子邮件。如果是这种情况,请从Android文档开始:http://developer.android.com/reference/android/app/Service.html

答案 2 :(得分:-1)

意图系统是一种在Activities之间切换的方法。以下是您定义的意图:

Intent i = new Intent(android.content.Intent.ACTION_SEND); 
                i.putExtra(android.content.Intent.EXTRA_EMAIL, Email); 
                ...
                i.setType("plain/text"); 

然后,意图用于开始活动不发送电子邮件

            startActivity(i); 

除了使用旨在允许用户创建和阅读电子邮件的内置电子邮件客户端,您只需实现SMTP协议,然后您可以在后台发送电子邮件而无需用户交互。如果您在谷歌上搜索,您会发现许多如何执行此操作的示例。这里有两个非常有用的信息: