0

私は現在、データベースから取得した特定のアドレスに電子メールを送信する必要があるプロジェクトを行っています。ただし、データベースの「メール」列には、実際にはメールが含まれていませんが、代わりに名前が含まれています。したがって、データベースにはロシア語のフルネームがあります

「Ivanov Alexandr」である「Иванов Александр」。したがって、この名前を 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 はアドレス帳を使用して、名前を電子メールの 1 つにマップします。そのため、手動で新しい電子メールを作成して名前を入力すると、正常に機能します。Outlook は単にアドレス帳を検索して、電子メール アドレスを見つけます。

ただし、これは Java プログラムとは異なります。プログラムは、電子メールを送信するために正確な電子メール アドレスを必要とします。現在、電子メールアドレスを見つける方法はたくさんあります。

最も簡単な方法は、電子メール アドレスをデータベース テーブルの 1 つに格納することです。個人が会社の SMTP システム/アクティブ ディレクトリに関連付けられている場合。Java smtp API / Active Directory API を使用して電子メールまたはエイリアス (通常は電子メール ID の @ の前の部分) を見つけてから、プログラムで電子メールを送信するために使用する電子メール ID を作成します。

于 2013-09-10T09:15:02.870 に答える
0

あなたのプログラムは

  1. メールを検証。正規表現を使用して実装できます: 正規表現を使用して電子メール アドレスを検証する

  2. フィールドに名前のみが含まれている場合、連絡先リストから電子メールを取得します。Outlook の連絡先を操作するための 2 つのライブラリがあります: Outlook の電子メール、カレンダーなどを読み取るためのオープン ソース Java ライブラリ

于 2013-09-10T09:46:08.267 に答える
0

有効なメールアドレスを提供する必要があります。メールに固定構造を使用している場合は、名前をラテン文字に変換して @domain.com を追加するだけです メールアドレスの作成にルールを使用していない場合は、データベースにメールフィールドを追加することをお勧めします

これがあなたの質問を解決するかどうかはわかりませんが

よろしく

于 2013-09-10T09:15:24.023 に答える