来自邮件的Android Gmail发件人错误

时间:2015-07-02 14:01:47

标签: android

            GMailSender sender = new GMailSender("myGmail@gmail.com", "myPassWord");
            try {
                sender.sendMail("hello admin",
                        "welcome!",
                        "user13141", // <- not working!
                        "to";
            } catch (Exception e) {
                Log.e("SendMail", e.getMessage(), e);
            }

GMailSender.java

public class MailSender extends javax.mail.Authenticator {

    private String mailhost = "smtp.gmail.com";
    private String user;
    private String password;
    private Session session;

    static {
        Security.addProvider(new com.example.ddm.JSSEProvider());
    }

    public MailSender(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 {
        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);
        if (recipients.indexOf(',') > 0)
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
        else
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
        Transport.send(message);
    }

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

}

在我的GMail中:

from: myGmail@gmail.com  
subject: hello admin  
content: welcome!

我想将“myGmail@gmail.com”更改为“user1341”。

from: user1341
subject: hello admin  
content: welcome!

我该如何解决?

1 个答案:

答案 0 :(得分:0)

String sendersender作为InternetAddress

  

此类使用RFC822的语法表示Internet电子邮件地址。典型的地址语法格式为&#34; user@host.domain"或&#34;个人姓名&#34;。

因此,您的InternetAddress&#34; user1341&#34;无效且被忽略。

要解决您的问题,请使用有效的sender,这意味着为其提供符合RFC的user@host.domain,格式为{{1}}。