gpt4 book ai didi

JavaMail 1.5.0 bug 或者 gmail 奇怪的问题?

转载 作者:行者123 更新时间:2023-12-01 23:27:26 24 4
gpt4 key购买 nike

我正在尝试使用包装 javax.mail 的类(JavaMail 1.5.0)发送电子邮件。它使用 smtp.gmail.com 发送并且它可以工作,但是工作得很好,因为当我向多个收件人发送电子邮件时,每封电子邮件都会发送(TO + CC)次,所以如果我向 3 个收件人发送电子邮件,我会得到总计9 封电子邮件(每封重复 3 次)。

这不太好...设置 session 调试显示电子邮件已正确发送给正确的收件人 1 次。我使用的是 jre6u45。

有什么问题吗?有人有任何提示吗?我是否犯了一个我没有看到的愚蠢错误?

这是我的代码:

import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class Mailer
{
public static boolean sendMail(
final String username,
final String password,
final String from,
final String _tos,
final String _ccs,
final String _bccs,
final String subject,
final String text,
final File[] attachments)
{
Properties p = null;
Session s = null;
boolean debug = true;
boolean res = false;
boolean isSecured = false;
boolean isSupported = true;
String host = null;
final String charset = "UTF-8";

String fromProvider = from.split("@")[1];
if(fromProvider.compareTo("gmail.com") == 0)
{
isSecured = true;
host = "smtp.gmail.com";
p = System.getProperties();
p.put("mail.smtp.host", host);
p.put("mail.smtps.auth", "true");
p.put("mail.smtp.port", "465");
p.put("mail.smtp.starttls.enable", "true");
p.put("mail.smtp.socketFactory.port", "465");
p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

s = Session.getInstance(p, null);
}
else {isSupported = false;}

if(isSupported)
{
s.setDebug(debug);

try
{
// init
MimeMessage email = new MimeMessage(s);
Multipart mp = new MimeMultipart();
InternetAddress[] tos = {};
InternetAddress[] ccs = {};
InternetAddress[] bccs = {};
// common
if(_tos != null) {tos = InternetAddress.parse(_tos);}
if(_ccs != null) {ccs = InternetAddress.parse(_ccs);}
if(_bccs != null) {bccs = InternetAddress.parse(_bccs);}
email.addRecipients(RecipientType.TO, tos);
email.addRecipients(RecipientType.CC, ccs);
email.addRecipients(RecipientType.BCC, bccs);

email.setSubject (subject, charset);
email.setSentDate (Calendar.getInstance().getTime());

// text part
MimeBodyPart mbpText = new MimeBodyPart();
mbpText.setText(text, charset, "html");
mp.addBodyPart(mbpText);

// attachments
if(attachments != null && attachments.length > 0)
{
for(int i=0; i<attachments.length; i++)
{
MimeBodyPart mbpAttachment = new MimeBodyPart();
mbpAttachment.attachFile(attachments[i]);
mp.addBodyPart(mbpAttachment);
}
}
// build elements
email.setContent(mp);
email.saveChanges();
Address[] addresses = email.getAllRecipients();
// send
Transport.send(email, addresses, username, password);

res = true;
}
catch(MessagingException ex) {ex.printStackTrace();}
catch(IOException ex) {ex.printStackTrace();}
}
return res;
}
}

最佳答案

由于我们不知道您正在执行什么代码,因此只能在这里进行猜测。也许您将邮件添加到所有 ReciptentType 中?

            email.addRecipients(RecipientType.TO,  tos);
email.addRecipients(RecipientType.CC, ccs);
email.addRecipients(RecipientType.BCC, bccs);

我建议您打印出地址数组。如果该数组多次包含邮件,我将开始查找它们是从哪里添加的。

关于JavaMail 1.5.0 bug 或者 gmail 奇怪的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19785654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com