从应用程序发送邮件

时间:2013-03-11 12:19:38

标签: android email smtp

我正在开发一个应用程序,我必须从应用程序发送邮件。邮件的正文和收件人不应该是可编辑的。所以我使用这个link逐步配置了gmail。

现在需要申请的是,FROM UserName和密码由用户提供。它可以是任何类型:

abc@gmail.com,
abc@rediffmail.com
abc@yahoomail.com

应发送电子邮件,用户输入的用户名和密码。我搜索了那个,并从yahoo id应用程序发送邮件应该在雅虎smtp服务器上配置。

但是,如果用户输入其他邮件ID,该怎么办?应用程序可以通过哪种方法发送邮件?为此我必须执行哪些步骤。

2 个答案:

答案 0 :(得分:0)

试试这个,

       address = (EditText) findViewById(R.id.address);
     subject = (EditText) findViewById(R.id.subject);
    emailbody = (EditText) findViewById(R.id.body);
    send = (Button) findViewById(R.id.send);

    send.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            sendEmail();
        }
    });
}

public void sendEmail(){

    if(!address.getText().toString().trim().equalsIgnoreCase("")){
      final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
      emailIntent.setType("plain/text");
      emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{ address.getText().toString()});
      emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject.getText());
      emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailbody.getText());
      sendMailDemo.this.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
    }
    else{
        Toast.makeText(getApplicationContext(), "Please enter an email address..", Toast.LENGTH_LONG).show();
    }

答案 1 :(得分:0)

如果你有gmail这很有用 首先从here下载这3个库 (邮件/激活/附加的) 将它们添加到项目中(将它们复制到项目/右键单击/添加到构建路径)

JSSEProvider类:

package com.emailsender;

import java.security.AccessController;

import java.security.Provider;



public final class JSSEProvider extends Provider {



public JSSEProvider() {

super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");

       AccessController

               .doPrivileged(new java.security.PrivilegedAction<Void>() {

                   public Void run() {

                       put("SSLContext.TLS",

                               "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");

                       put("Alg.Alias.SSLContext.TLSv1", "TLS");

                       put("KeyManagerFactory.X509",

                               "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");

                       put("TrustManagerFactory.X509",

                               "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");

                       return null;

                   }

               });

   }

}

GmailSender类:

package com.emailsender;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.activation.FileDataSource;

import javax.mail.BodyPart;

import javax.mail.Message;

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;  

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.security.Security;

import java.util.Properties;


public class GMailSender extends javax.mail.Authenticator {

private String mailhost = "smtp.gmail.com";

    private String user;

    private String password;

    private Session session;



    private Multipart _multipart = new MimeMultipart();

    static {

        Security.addProvider(new  shooreshi.fayyaz.ghariebartar.JSSEProvider());

    }



    public GMailSender(String user, String password) {

        this.user = user;

        this.password = password;



        Properties props = new Properties();

        props.setProperty("mail.transport.protocol", "smtp");

        props.setProperty("mail.host", mailhost);

        props.put("mail.smtp.auth", "true");

        props.put("mail.smtp.port", "465");

        props.put("mail.smtp.socketFactory.port", "465");

        props.put("mail.smtp.socketFactory.class",

                "javax.net.ssl.SSLSocketFactory");

        props.put("mail.smtp.socketFactory.fallback", "false");

        props.setProperty("mail.smtp.quitwait", "false");



        session = Session.getDefaultInstance(props, this);

    }



    protected PasswordAuthentication getPasswordAuthentication() {

        return new PasswordAuthentication(user, password);

    }



    public synchronized void sendMail(String subject, String body,

            String sender, String recipients) throws Exception {

        try {

            MimeMessage message = new MimeMessage(session);

            DataHandler handler = new DataHandler(new ByteArrayDataSource(

                    body.getBytes(), "music"));

            message.setSender(new InternetAddress(sender));

            message.setSubject(subject);

            message.setDataHandler(handler);

            BodyPart messageBodyPart = new MimeBodyPart();

            messageBodyPart.setText(body);

            _multipart.addBodyPart(messageBodyPart);



            // Put parts in message

            message.setContent(_multipart);

            if (recipients.indexOf(',') > 0)

                message.setRecipients(Message.RecipientType.TO,

                        InternetAddress.parse(recipients));

            else

                message.setRecipient(Message.RecipientType.TO,

                        new InternetAddress(recipients));

            Transport.send(message);

        } catch (Exception e) {



        }

    }



    public void addAttachment(String filename) throws Exception {

        BodyPart messageBodyPart = new MimeBodyPart();

        DataSource source = new FileDataSource(filename);

        messageBodyPart.setDataHandler(new DataHandler(source));

        messageBodyPart.setFileName("music.mp3");



        _multipart.addBodyPart(messageBodyPart);

    }



    public class ByteArrayDataSource implements DataSource {

        private byte[] data;

        private String type;





        public ByteArrayDataSource(byte[] data, String type) {

            super();

            this.data = data;

            this.type = type;

        }



        public ByteArrayDataSource(byte[] data) {

            super();

            this.data = data;

        }





        public void setType(String type) {

            this.type = type;

        }



        public String getContentType() {

            if (type == null)

                return "application/octet-stream";

            else

                return type;

        }



        public InputStream getInputStream() throws IOException {

            return new ByteArrayInputStream(data);

        }



        public String getName() {

            return "ByteArrayDataSource";

        }



        public OutputStream getOutputStream() throws IOException {

            throw new IOException("Not Supported");

        }

    }

}

发送代码:

          new Thread(new Runnable() {

              public void run() {

                  try {

                      GMailSender sender = new GMailSender(

                              "yourgmail@gmail.com",

                              "yourpassword");



                    sender.addAttachment(Environment.getExternalStorageDirectory().getPath()+"/image.jpg");

                      sender.sendMail("your text",

                              "senderemail@gmail.com",

                              "recieveremail@gmail.com");









                  } catch (Exception e) {

                      Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show();



                  }

              }

          }).start();

别忘了添加权限!