我尝试使用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 :"));
}
});
我可以发送电子邮件,但是当我选择电子邮件客户端时,我可以更改主题文本和额外文本。当用户选择电子邮件客户端时,如何编写使用的代码不会改变主题和额外文本?
答案 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
之类的方式自动化作为一名用户,我非常担心从手机发送电子邮件,我看不到主题和正文。您可能只想使用现在的方法,他们可以编辑文本,或者至少向他们显示您要发送的内容。