0

我目前正在做一个项目,我需要向从数据库中获取的特定地址发送电子邮件。但是,数据库中的“电子邮件”列实际上并不包含电子邮件,而是包含名称。所以在数据库中有俄语的全名,比如

“Иванов Александр”,即“伊万诺夫·亚历山大”。因此,当我在 Outlook 中键入此名称时,它会自动找到他的电子邮件:AIvanov@domainname.com。但是在我的 java 代码中,当我使用名称“Иванов Александр”时,我不断收到错误消息。

这是我的java代码

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");
        }

在此代码中,字符串电子邮件是Иванов Александр。

我一直收到这个错误

javax.mail.internet.AddressException:本地地址在字符串“Иванов Александр”中包含控件或空格

所以想知道我可以让这个字符串通过的方式。

谢谢你。

4

3 回答 3

1

Outlook 使用其地址簿将名称映射到其中一封电子邮件。这就是为什么它可以正常工作的原因,如果您手动尝试创建新电子邮件并输入名称。Outlook 只需在通讯簿中查找并找出电子邮件地址。

但是,这与 java 程序不同。该程序需要确切的电子邮件地址来发送电子邮件。现在可能有很多方法可以找到电子邮件地址。

最简单的方法是将电子邮件地址存储在一个数据库表中。如果此人与公司的 SMTP 系统/活动目录相关联;您可以使用 java smtp API / 活动目录 API 来找出电子邮件或别名(通常是电子邮件 ID 在@之前的一部分),然后创建电子邮件 ID 以用于程序发送电子邮件。

于 2013-09-10T09:15:02.870 回答
0

您需要提供一个有效的邮件地址。如果您的邮件使用固定结构,只需将名称转换为拉丁字符并附加@domain.com 如果您没有使用任何规则来创建邮件地址,那么我建议您在数据库中添加一个电子邮件字段

不知道这是否解决了你的问题

问候

于 2013-09-10T09:15:24.023 回答
0

你的程序必须

  1. 确认电邮。可以使用正则表达式实现:使用正则表达式验证电子邮件地址

  2. 当字段仅包含姓名时,从联系人列表中获取电子邮件。有两个用于处理 Outlook 联系人的库: 用于阅读 Outlook 电子邮件、日历等的开源 Java 库

于 2013-09-10T09:46:08.267 回答