android - 更改电子邮件发件人 - Android
问题描述
我正在尝试从我的应用程序发送一封自动电子邮件。我尝试了很多教程,但只有一个有效。问题是我想将发件人从电子邮件更改为姓名。
.
这些是工作代码(我不知道为什么教程中的其他代码没有):
GMail.java
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.util.Log;
public class GMail {
final String emailPort = "587";// gmail's smtp port
final String smtpAuth = "true";
final String starttls = "true";
final String emailHost = "smtp.gmail.com";
String fromEmail;
String fromPassword;
@SuppressWarnings("rawtypes")
String toEmailList;
String emailSubject;
String emailBody;
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;
public GMail() {
}
@SuppressWarnings("rawtypes")
public GMail(String fromEmail, String fromPassword,
String toEmailList, String emailSubject, String emailBody) {
this.fromEmail = fromEmail;
this.fromPassword = fromPassword;
this.toEmailList = toEmailList;
this.emailSubject = emailSubject;
this.emailBody = emailBody;
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", emailPort);
emailProperties.put("mail.smtp.auth", smtpAuth);
emailProperties.put("mail.smtp.starttls.enable", starttls);
Log.i("GMail", "Mail server properties set.");
}
public MimeMessage createEmailMessage() throws AddressException,
MessagingException, UnsupportedEncodingException {
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));
Log.i("GMail","toEmail: "+toEmailList);
emailMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(toEmailList));
emailMessage.setSubject(emailSubject);
emailMessage.setContent(emailBody, "text/html");// for a html email
// emailMessage.setText(emailBody);// for a text email
Log.i("GMail", "Email Message created.");
return emailMessage;
}
public void sendEmail() throws AddressException, MessagingException {
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromEmail, fromPassword);
Log.i("GMail","allrecipients: "+emailMessage.getAllRecipients());
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
Log.i("GMail", "Email sent successfully.");
}
}
发送邮件任务.java
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.os.AsyncTask;
import android.util.Log;
@SuppressWarnings("rawtypes")
public class SendMailTask extends AsyncTask {
private Activity sendMailActivity;
public SendMailTask(Activity activity) {
sendMailActivity = activity;
}
protected void onPreExecute() {
}
@SuppressWarnings("unchecked")
@Override
protected Object doInBackground(Object... args) {
try {
Log.i("SendMailTask", "About to instantiate GMail...");
publishProgress("Processing input....");
GMail androidEmail = new GMail(args[0].toString(),
args[1].toString(), args[2].toString(), args[3].toString(),
args[4].toString());
publishProgress("Preparing mail message....");
androidEmail.createEmailMessage();
publishProgress("Sending email....");
androidEmail.sendEmail();
publishProgress("Email Sent.");
Log.i("SendMailTask", "Mail Sent.");
} catch (Exception e) {
publishProgress(e.getMessage());
Log.e("SendMailTask", e.getMessage(), e);
}
return null;
}
@Override
public void onProgressUpdate(Object... values) {
}
@Override
public void onPostExecute(Object result) {
}
}
在MainActivity.java中的 onButtonClick 方法:
String fromEmail = "email@gmail.com";
String fromPassword = "email-password";
String toEmails = "toEmail@gmail.com";
String emailSubject = "App Registration Mail";
String emailBody = "Your message";
new SendMailTask(PlayerMainActivity.this).execute(fromEmail, fromPassword, toEmails, emailSubject, emailBody);
并且确定在libs
文件夹中添加了 3 个 jar 文件。
我想将电子邮件中的电子邮件(即 email@gmail.com)更改为特定名称(例如 The App Team)。我怎样才能做到这一点?
解决方案
代替
emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));
和
emailMessage.setFrom(new InternetAddress(fromEmail, "Sender Name Here"));
推荐阅读
- java - 参数索引超出范围(1 > 参数个数,即 0)。如何解决?
- python - “ValueError:没有足够的值来解包(预期 3,得到 1)”来自 str.split() 的错误
- python - numpy数组中元素的访问属性
- linux - Linux, ignore reference to a $variable on command line. Take literal string instead
- excel - Copying table from Excel to Word bookmark using VBA
- c - How to long value compare?
- python - Requesting intraday historical data via Bloomberg API in python
- mysql - MySQL 选择 - 首先获取指定的列,然后是所有其他列(星号) - 错误 1064
- logging - 用于已停止模拟的 Dymola BlockTimers
- c# - Parallel for loop to add points to series resulting in index outside the bounds of array