java - 想要在android中使用JavaMailAPI发送电子邮件。该代码工作正常并且所有信息都显示在日志中

标签 java android email jakarta-mail

想要在android中使用JavaMailAPI发送电子邮件。该代码工作正常并且所有信息都显示在日志中。但是当我检查我的电子邮件 ID 时,没有发送任何内容,也没有收到任何内容。

package com.example.android.emailverification;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; 
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements        
View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button send = (Button) findViewById(R.id.send);
    send.setOnClickListener(this);
}


private void sendEmail() {
    new Thread(new Runnable() {
        public void run() {
            try {
                Log.e(">>", "Inside SendEmail run()");
                GMailSender sender = new GMailSender("*********","*******");
                // sender.addAttachment(mFilePath);
                sender.sendMail("Test mail","This mail has been sent from android app along with attachment", "*******","********");
                Log.v("MainActivity", "Your mail has been sent…");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}

@Override
public void onClick(View v) {
    Log.e(">>", "Button clicked");
    sendEmail();
}
}

JSSEProvider.java

import android.util.Log;
import java.security.AccessController;
import java.security.Provider;

public final class JSSEProvider extends Provider {
private static final long serialVersionUID = 1L;
public JSSEProvider() {
    super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
    AccessController
            .doPrivileged(new java.security.PrivilegedAction<Void>() {
                public Void run() {
                    Log.e(">>","Inside JSSEPROVIDER");
                    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.java

package com.example.android.emailverification;

import android.util.Log;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.util.Properties;
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;

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 {
    Log.e(">>", "inside multipart");
    Security.addProvider(new JSSEProvider());
}

public GMailSender(String user, String password) {
    this.user = user;
    this.password = password;

    Properties props = new Properties();

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");
    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.host", mailhost);

    Log.e(">>", "properties set");
    session = Session.getDefaultInstance(props, this);
    Log.e(">>","Session get");
}

protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(user, password);
}

/**
 * Use
 * {@link #sendMail(String subject, String body, String sender, String     recipients)}
 *
 */

public synchronized void sendMail(String subject, String body,
                                  String sender, String recipients) throws Exception {
    try {
        Log.e(">>", subject + "\n" + body + "\n" + sender + "\n" + recipients);
        MimeMessage message = new MimeMessage(session);
        DataHandler handler = new DataHandler(new ByteArrayDataSource(
                body.getBytes(),"text/plain"));
        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) {
        e.printStackTrace();
    }
}

   public void addAttachment(String filename) throws Exception {
 /* BodyPart messageBodyPart = new MimeBodyPart();
 DataSource source = new FileDataSource(filename);
 messageBodyPart.setDataHandler(new DataHandler(source));
 messageBodyPart.setFileName(“download Pdf”);

_multipart.addBodyPart(messageBodyPart);*/
/* Message message = new MimeMessage(session);
  Multipart _multipart = new MimeMultipart();  
BodyPart messageBodyPart = new MimeBodyPart();
File sdCard =Environment.getExternalStorageDirectory();
String path=sdCard.getAbsolutePath() + “/pdf/”+”/test.pdf”;
messageBodyPart.setFileName(path);
messageBodyPart.setDisposition(MimeBodyPart.ATTACHMENT);  
_multipart.addBodyPart(messageBodyPart);

  // Put parts in message
  message.setContent(_multipart);*/
    BodyPart messageBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(filename);
    messageBodyPart.setDataHandler(new DataHandler(source));
    messageBodyPart.setFileName(filename);
   _multipart.addBodyPart(messageBodyPart);

    BodyPart messageBodyPart2 = new MimeBodyPart();
    messageBodyPart2.setText("subject43");

    _multipart.addBodyPart(messageBodyPart2);
}

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

日志猫

Reconstruct Branch: NOTHING
03-19 22:37:51.817 31943-32009/com.example.android.emailverification      I/OpenGLRenderer: Initialized EGL, version 1.4
03-19 22:37:51.827 31943-32009/com.example.android.emailverification D/OpenGLRenderer: Enabling debug mode 0
03-19 22:37:51.907 31943-31943/com.example.android.emailverification I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@1b9c2261 time:1608595
03-19 22:38:05.427 31943-31943/com.example.android.emailverification E/>>: Button clicked
03-19 22:38:05.447 31943-32418/com.example.android.emailverification E/>>: Inside SendEmail run()
03-19 22:38:05.467 31943-32418/com.example.android.emailverification E/>>: inside multipart
03-19 22:38:05.467 31943-32418/com.example.android.emailverification E/>>: Inside JSSEPROVIDER
03-19 22:38:05.507 31943-32418/com.example.android.emailverification E/>>: properties set
03-19 22:38:05.547 31943-32418/com.example.android.emailverification E/>>: Session get
03-19 22:38:05.547 31943-32418/com.example.android.emailverification E/>>:     Test mail
                                                                       This  mail has been sent from android app along with attachment
                                                                       kumesh257@gmail.com
                                                                        yadavumesh8090@gmail.com
03-19 22:38:05.567 31943-31954/com.example.android.emailverification W/art: Suspending all threads took: 6.202ms
03-19 22:38:09.267 31943-32418/com.example.android.emailverification W/System.err: javax.mail.AuthenticationFailedException   
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at javax.mail.Service.connect(Service.java:319)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at javax.mail.Service.connect(Service.java:169)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at javax.mail.Service.connect(Service.java:118)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at javax.mail.Transport.send0(Transport.java:188)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at javax.mail.Transport.send(Transport.java:118)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at   com.example.android.emailverification.GMailSender.sendMail(GMailSender.java:104)    03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at com.example.android.emailverification.MainActivity$1.run(MainActivity.java:28)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification W/System.err:     at java.lang.Thread.run(Thread.java:818)
03-19 22:38:09.277 31943-32418/com.example.android.emailverification V/MainActivity: Your mail has been sent…

最佳答案

检查 list 文件中的互联网权限。

关于java - 想要在android中使用JavaMailAPI发送电子邮件。该代码工作正常并且所有信息都显示在日志中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889945/

相关文章:

java - Vaadin 组件树可能吗?

java - 数组未捕获第一个用户条目

java - 从 Android 应用程序进行 NFC 打印

PHP fatal error : require_once(): Failed opening required 'Mail.php' (include_path ='.:/usr/share/pear:/usr/share/php' )

方法参数是接口(interface)的Java反射

java - 如何发现两个物体之间的角度?

安卓内存统计

html - 在电子邮件模板中未显示嵌入式YouTube视频

javascript - 这是一个有效的电子邮件地址吗?

java - mvn混淆器: Is there possible obfuscate dependency before copying