簡體   English   中英

使用數據庫以Java發送電子郵件

[英]Sending email in Java by using database

我目前正在做一個項目,要求我發送電子郵件到從數據庫獲取的特定地址。 但是,數據庫中的“電子郵件”列實際上並不包含電子郵件,而是名稱。 因此在數據庫中有俄語全名,例如

“ИвановАлександр”是“伊萬諾夫·亞歷山大”。 因此,當我在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:本地地址包含字符串``ИвановАлександр''中的控件或空格

因此想知道如何使此字符串通過。

謝謝。

Outlook使用其通訊簿將名稱映射到其中一封電子郵件。 這就是為什么它工作正常的原因,如果您手動嘗試創建新電子郵件並僅輸入名稱。 Outlook只是在通訊簿中進行查找並找出電子郵件地址。

但是,這與Java程序不同。 該程序需要准確的電子郵件地址才能發送電子郵件。 現在可以有很多方法來查找電子郵件地址。

最簡單的方法是將電子郵件地址存儲在數據庫表之一中。 如果此人與公司的SMTP系統/活動目錄關聯; 您可以使用Java smtp API /活動目錄API來查找電子郵件或別名(通常是@之前的電子郵件ID的一部分),然后創建要用於程序中的電子郵件ID。

您需要提供一個有效的郵件地址。 如果您對郵件使用固定的結構,只需將名稱轉換為拉丁字符並附加@ domain.com。如果您不對創建郵件地址使用任何規則,那么建議您向數據庫中添加一個電子郵件字段

不知道這是否可以解決您的問題

問候

您的程序必須

  1. 驗證電子郵件。 可以使用正則表達式來實現: 使用正則表達式來驗證電子郵件地址

  2. 當字段僅包含姓名時,從聯系人列表中獲取電子郵件。 有兩個與Outlook聯系人一起使用的庫: 開源Java庫,用於讀取Outlook電子郵件,日歷等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM