开发者

android: sending email automatically

开发者 https://www.devze.com 2023-04-11 21:07 出处:网络
at first sorry for my English. I need to make app that will automatically send a file from the SD card. I thought that I will do

at first sorry for my English. I need to make app that will automatically send a file from the SD card. I thought that I will do it through email. I write the code to send email

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); 
        } 
}

works well, but I feel that it cannot be configured to be sending automatically. How can I start? or do you have any idea how to automatically send a file from the SD card? eg. via FTP or something else? .. Thank you very much


i have got this code

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); 
          } 
        } 
      }); 
    } 

}

what is wrong here?.. =//


If you like to send an email without user interaction you can use SMTP protocol and outside mail server


Your question is unclear... do you mean you simply want the app to send the email without requiring the user to press a button? More likely, I'd guess you're asking about Android's background service functionality, where your app runs on a schedule and sends email without user interaction. If that's the case, start with the Android documentation: http://developer.android.com/reference/android/app/Service.html


The intent system is a way to switch between Activities. Here is the intent you defined:

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

The intent is then used to start an activity not send an email

            startActivity(i); 

Instead of using the built in email client which is designed to allow users to create and read emails you simply need to implement the SMTP protocols and you can then send the email in the background without user interaction. If you search on google you will find many examples of how to do this. Here are two that are very informative:

  • http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_(no_Intents)_in_Android
  • Sending Email in Android using JavaMail API without using the default/built-in app
0

精彩评论

暂无评论...
验证码 换一张
取 消