【问题标题】:Send mail from application从应用程序发送邮件
【发布时间】:2023-03-30 23:50:01
【问题描述】:

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

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

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

无论用户输入什么用户名和密码,都应该发送电子邮件。我搜索了一下,发现要从 yahoo id 应用程序发送邮件,应该在 yahoo smtp 服务器上配置。

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

【问题讨论】:

标签: android email smtp


【解决方案1】:

如果你有 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();

别忘了添加权限!

【讨论】:

    【解决方案2】:

    这样试试,

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

    【讨论】:

    • 我已经试过了。但是通过这段代码可以访问默认的作曲家。其中邮件正文和地址是可编辑的。我的应用程序需要的是正文和地址不应该是可编辑的。
    • 查看此链接.. 这可能会有所帮助stackoverflow.com/questions/2020088/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2021-06-08
    • 2020-05-24
    • 2011-05-08
    • 2010-09-23
    • 2015-05-09
    • 2011-08-06
    相关资源
    最近更新 更多