Android发送电子邮件

时间:2014-07-03 14:19:33

标签: java android email-integration

我尝试使用Intent发送电子邮件。我写了代码女巫可以发送电子邮件

send.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent email = new Intent(Intent.ACTION_SEND); 
        email.putExtra(Intent.EXTRA_EMAIL, new String[] { Email }); 
        email.putExtra(Intent.EXTRA_SUBJECT,"subject"); 
        email.putExtra(Intent.EXTRA_TEXT, "text1"); 

        email.setType("message/rfc822"); 

        startActivity(Intent.createChooser(email, "Choose an Email client :"));
    }
});

我可以发送电子邮件,但是当我选择电子邮件客户端时,我可以更改主题文本和额外文本。当用户选择电子邮件客户端时,如何编写使用的代码不会改变主题和额外文本?

2 个答案:

答案 0 :(得分:1)

避免用户更改电子邮件文本的唯一方法是发送邮件 以编程方式,即没有UI。它通常使用JavaMail API在Android中完成。

通过JavaMail发送电子邮件

首先在发件人类中添加以下行:

static {
    Security.addProvider(new JSSEProvider()); 
}

JSSEP代表Java安全套接字扩展,它是用于的协议 我们稍后将使用的Gmail身份验证。

您可以在以下位置获取JSSEProvider的工作示例:   https://android.googlesource.com/platform/libcore/+/jb-mr2-release/luni/src/main/java/org/apache/harmony/xnet/provider/jsse/JSSEProvider.java


创建发件人类:

公共类EmailSender扩展了javax.mail.Authenticator {

 void sendMail(username, password, )  {
     ...
 }

}

我们现在转到sendMail()方法实现:

首先设置通过Gmail传输的属性:

Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.gmail.com"); // <--------- via Gmail
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);


然后发送邮件:

  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);
  message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
  Transport.send(message);

ByteArrayDataSource是一个标准实现。你可以从中获取它   http://commons.apache.org/proper/commons-email/apidocs/src-html/org/apache/commons/mail/ByteArrayDataSource.html

您还需要添加以下方法,将PasswordAuthentication返回给您的班级:

@Override
protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(user, password);
}
祝你好运。

答案 1 :(得分:0)

如果您确实需要锁定主题和邮件正文,但让用户选择电子邮件收件人(“收件人”列表),则必须向他们提供一个对话框以输入电子邮件收件人,然后发送电子邮件以Apache Commons EMail

之类的方式自动化

作为一名用户,我非常担心从手机发送电子邮件,我看不到主题和正文。您可能只想使用现在的方法,他们可以编辑文本,或者至少向他们显示您要发送的内容。