2

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

现在应用程序的需要是,FROM 用户名和密码由用户给出。它可以是任何类型,例如:

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

电子邮件应该发送,无论用户输入的用户名和密码是什么。我对此进行了搜索,并得到了从 yahoo id 应用程序发送邮件的信息,该应用程序应在 yahoo smtp 服务器上配置。

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

4

2 回答 2

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();
    }
于 2013-03-11T12:35:49.923 回答
0

如果您有 gmail,这很有用,首先从此处下载这 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();

不要忘记添加权限!

于 2015-04-19T20:29:33.167 回答