利用数据库在Java中发送电子邮件
我目前正在做一个项目,我需要发送一封电子邮件到特定的地址采取从数据库。然而,数据库中的“email”列实际上并不包含电子邮件,而是包含名称。所以在数据库中有俄语的全名,比如 “аааааааАаааааааа107。因此,当我在outlook中键入此名称时,它会自动找到他的电子邮件:AIvanov@domainname.com. 但是,在我的java代码中,当我使用名称“БаааСАааааСааааа1072 这是我的java代码利用数据库在Java中发送电子邮件,java,email,smtp,Java,Email,Smtp,我目前正在做一个项目,我需要发送一封电子邮件到特定的地址采取从数据库。然而,数据库中的“email”列实际上并不包含电子邮件,而是包含名称。所以在数据库中有俄语的全名,比如 “аааааааАаааааааа107。因此,当我在outlook中键入此名称时,它会自动找到他的电子邮件:AIvanov@domainname.com. 但是,在我的java代码中,当我使用名称“БаааСАааааСааааа1072 这是我的java代码 File[] listOfFiles = outDir.lis
File[] listOfFiles = outDir.listFiles();
if (outDir.isDirectory()) {
if (outDir.list().length > 0) {
for (File file : listOfFiles) {
Session session_m = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session_m);
message.setFrom (new InternetAddress("mmm@domainname.com", "mmm@domainname.com"));
InternetAddress i = new InternetAddress("\""+email+"\"", false);
message.addRecipient(Message.RecipientType.TO, i);
message.setSubject("test");
message.setText("test");
message.setHeader("Content-Type","text/plain;charset=windows-1251");
MimeBodyPart mbp1 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(file);
mbp1.setDataHandler(new DataHandler(fds));
mbp1.setFileName(fds.getName());
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
System.out.println("[EmailHandler] Attaching the following file to email: " + fds.getName());
message.setContent(mp);
SMTPTransport t = (SMTPTransport)session_m.getTransport("smtp");
t.connect("mail.domainname.com", "main@domainname.com", null);
System.out.println("[EmailHandler] Sending email... ");
t.sendMessage(message, message.getAllRecipients());
file.delete();
Thread.sleep(3000);
}
} else {
System.out.println("[EmailHandler] Folder " + outDir.getName() + " is empty... nothing to attach");
}
} else {
System.out.println("Folder not found... Check the path");
}
在该代码中,字符串email为БааааАааааСаааа107
我不断地犯这个错误
javax.mail.internet.AddressException:本地地址包含字符串``БаааааАаааааааа107
我想知道我能让这根绳子穿过的方法
谢谢。outlook使用其通讯簿将名称映射到其中一封电子邮件。这就是为什么它工作良好,如果你手动创建一个新的电子邮件,只是把名字。Outlook只需在通讯簿中查找并找到电子邮件地址 但是,这与java程序不同。程序需要准确的电子邮件地址才能发送电子邮件。现在有很多方法可以找到电子邮件地址 最简单的方法是将电子邮件地址存储在一个数据库表中。
如果此人与公司的SMTP系统/active directory关联;您可以使用java smtp API/active directory API查找电子邮件或别名(通常是@之前电子邮件id的一部分),然后创建电子邮件id以用于程序发送电子邮件。您需要提供有效的邮件地址。如果您的邮件使用固定结构,只需将名称转换为拉丁字符并附加@domain.com即可 如果您没有使用任何创建邮件地址的规则,那么我建议您在数据库中添加一个电子邮件字段 但我不知道这是否解决了你的问题 关于您的程序必须
非常感谢。是的,我想我已经习惯于使用active directory,通过提供真实的全名来查找电子邮件地址。欢迎使用。我希望这个解决方案能解决你的问题。