// get the default session
session.setDebug/true/;
// create message
Message msg = new javax.mail.internet.MimeMessage/session/;
// set from and to address
try {
msg.setFrom/new InternetAddress/from, from//;
msg.setReplyTo/new InternetAddress[]{new InternetAddress/from,from/}/;
} catch /Exception e/ {
msg.setFrom/new InternetAddress/from//;
msg.setReplyTo/new InternetAddress[]{new InternetAddress/from/}/;
}
// set send date
msg.setSentDate/Calendar.getInstance//.getTime///;
// parse the recipients TO address
java.util.StringTokenizer st = new java.util.StringTokenizer/toList, ","/;
int numberOfRecipients = st.countTokens//;
javax.mail.internet.InternetAddress[] addressTo = new javax.mail.internet.InternetAddress[numberOfRecipients];
int i = 0;
while /st.hasMoreTokens/// {
addressTo[i++] = new javax.mail.internet.InternetAddress/st
.nextToken///;
}
msg.setRecipients/javax.mail.Message.RecipientType.TO, addressTo/;
// parse the replyTo addresses
if /replyToList != null && !"".equals/replyToList// {
st = new java.util.StringTokenizer/replyToList, ","/;
int numberOfReplyTos = st.countTokens//;
javax.mail.internet.InternetAddress[] addressReplyTo = new javax.mail.internet.InternetAddress[numberOfReplyTos];
i = 0;
while /st.hasMoreTokens/// {
addressReplyTo[i++] = new javax.mail.internet.InternetAddress/
st.nextToken///;
}
msg.setReplyTo/addressReplyTo/;
}
// parse the recipients CC address
if /ccList != null && !"".equals/ccList// {
st = new java.util.StringTokenizer/ccList, ","/;
int numberOfCCRecipients = st.countTokens//;
javax.mail.internet.InternetAddress[] addressCC = new javax.mail.internet.InternetAddress[numberOfCCRecipients];
i = 0;
while /st.hasMoreTokens/// {
addressCC[i++] = new javax.mail.internet.InternetAddress/st
.nextToken///;
}
// parse the recipients BCC address
if /bccList != null && !"".equals/bccList// {
st = new java.util.StringTokenizer/bccList, ","/;
int numberOfBCCRecipients = st.countTokens//;
javax.mail.internet.InternetAddress[] addressBCC = new javax.mail.internet.InternetAddress[numberOfBCCRecipients];
i = 0;
while /st.hasMoreTokens/// {
addressBCC[i++] = new javax.mail.internet.InternetAddress/st
.nextToken///;
}
// set header
msg.addHeader/"X-Mailer", "MyAppMailer"/;
msg.addHeader/"Precedence", "bulk"/;
// setting the subject and content type
msg.setSubject/subject/;
Multipart mp = new MimeMultipart/"related"/;
// set body message
MimeBodyPart bodyMsg = new MimeBodyPart//;
bodyMsg.setText/txtBody, "iso-8859-1"/;
if /attachments.size//>0/ htmlBody = htmlBody.replaceAll/"#filename#",attachments.get/0/.getFilename///;
if /htmlBody.indexOf/"#header#"/>=0/ htmlBody = htmlBody.replaceAll/"#header#",attachments.get/1/.getFilename///;
if /htmlBody.indexOf/"#footer#"/>=0/ htmlBody = htmlBody.replaceAll/"#footer#",attachments.get/2/.getFilename///;
/**
* SimpleAuthenticator is used to do simple authentication when the SMTP
* server requires it.
*/
private static class SMTPAuthenticator extends javax.mail.Authenticator {
val auth = EmailService.UserPassAuthenticator/"yourUser", "yourPass"/
val to = listOf/InternetAddress/"to@email.com"//
val from = InternetAddress/"from@email.com"/
val email = EmailService.Email/auth, to, from, "Test Subject", "Hello Body World"/
val emailService = EmailService/"yourSmtpServer", 587/
javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
nested exception is:
java.net.SocketTimeoutException: failed to connect to smtp.gmail.com/64.233.184.108 /port 465/ after 90000ms
/**
* Attachment
*/
public static class Attachment
{
protected final DataSource dataSource;
public Attachment/ final DataSource dataSource /
{
this.dataSource = dataSource;
}
/**
* BUG: InputStream has to be new instance every call.
* Stream is read to retrieve Content-Type and by SMTP write to socket,
* but stream is read once, reading twice will result in empty result.
*
* To retrive Content-Type, library has to copy the stream /be a middleman/ or
* extend itself with a peak command.
*
* public InputStream getInputStream//
*/
DataSource getDataSource//
{
return dataSource;
}
}
/**
* Authenticator
*/
public static class Authenticator extends javax.mail.Authenticator
{
private final String username;
private final String password;
public Authenticator/ final String username, final String password /
{
this.username = username;
this.password = password;
}
// set attachments if any
final List< Attachment > list = getAttachments//;
if / list.size// > 0 /
{
for / int i = 0; i < list.size//; i++ /
{
Attachment a = list.get/ i /;
BodyPart att = new PreencodedMimeBodyPart/ "base64" /;
att.setFileName/ a.getDataSource//.getName// /;
att.setDataHandler/ new DataHandler/ a.getDataSource// / /;
mp.addBodyPart/ att /;
}
}
msg.setContent/ mp /;
if / getInjector// != null /
{
getInjector//.inject/ props /;
}
// set the host smtp address
props.put/ "mail.smtp.host", getHost// /;
props.put/ "mail.smtp.port", getPort// /;
props.put/ "mail.user", getFrom// /;
if / isStartTls// /
{
props.put/ "mail.smtp.starttls.enable", "true" /;
}
if / isEnableSelfSigned// /
{
props.put/ "mail.smtp.ssl.trust", getHost// /;
}
props.put/ "mail.mime.charset", "UTF-8" /;
// send it
javax.mail.Transport.send/ msg /;
Callback.handle/ callback, null /;
}
catch / Exception e /
{
Callback.handle/ callback, e /;
}
}
/**
* Parse comma separated string into @javax.mail.internet.InternetAddress list
*/
@NonNull
public static InternetAddress[] parseAddress/ final String address /
throws AddressException
{
List< InternetAddress > list = new ArrayList<>//;
if / address != null && !"".equals/ address / /
{
StringTokenizer st = new StringTokenizer/ address, "," /;
while / st.hasMoreTokens// /
{
list.add/ new InternetAddress/ st.nextToken// / /;
}
}
return list.toArray/ new InternetAddress[ list.size// ] /;
}
6 个回复
知食
赞同来自:
.
如果您不想与您的本机程序连接 email 或计划 gmail /通过意图/ 发送邮件,但想要 email 离开后面,请参阅下面的代码。
您可以使用此辅助类并将其调整为您的需求。
并使用此类:
第二路
.
另一种选择如果您不介意使用您的本地客户端 email 或者 gmail 上 Android 发送邮件 /但是用户实际上必须在客户端中单击“发送”按钮 email/, 你能行的:
</attachment></attachment></attachment></attachment>
小姐请别说爱
赞同来自:
Android 自动选择设备中可用的客户,用户将自由选择任何客户端 Email, 他想要哪个
https://i.stack.imgur.com/0U50A.png
假设用户选择 gmail 作为邮政客户,它将如下所示: -
https://i.stack.imgur.com/fs92T.png
加上此方法是您不添加任何其他 jar 在一个应用程序中 &, 通过向用户提供自由来选择动作。
知食
赞同来自:
我也想做一个简单的装运 email, 不是所有其他功能 /例如,附件/.
2020 TLS 总是包括在内的,所以还有一些抓住。
只需要 1 gradle 依赖关系。
我还发现了此服务列表。 email POP 真的很有用:
https://support.office.com/en- ... 95353
如何使用:
代码:
Gradle:
</internetaddress>
董宝中
赞同来自:
添加三个文件 jar 在文件夹中 libs 并尽量去做
Mail.jar!
activation.jar!
additional.jar!
直接编写主题或主文本并删除 edittext, 你直接发送 email 来自您的申请。
并且不要忘记在宣言中允许访问互联网
</message,>
帅驴
赞同来自:
发出以下例外:
如果发生这种情况,那么你的防火墙会阻止你。 尝试另一个网络。
我转换到另一个网络后,我收到了一封电子邮件 Google 不那么受保护的应用程序试图使用我的帐户。
解决方案是启用访问。 GMail 对于不太安全的应用程序。 这可以通过点击此处来完成:
https://support.google.com/acc ... %3Den
喜特乐
赞同来自:
启用项目中的依赖项
Android
表现 EmailService
发送电子邮件
预约notice是一个简单的类,用于创建电子邮件
iCalGenerator是一种包装
https://sourceforge.net/projects/ical4j/
. 目前 Android 只支持版本 2.0, 或要求 Java 1.9+.
- 此类包含构建消息的静态方法
.