6

私たちの Web アプリケーションは、電子メール ID を入力したすべてのユーザーに電子メールを送信します。しかし、ユーザーが入力した電子メール ID が有効であることを確認するにはどうすればよいでしょうか。メールを送信するためのコードがあります。しかし、メールIDが存在しなくてもエラーにはなりません。問題の解決方法を教えてください。電子メール ID が実際に存在しない場合は、何らかのエラーが発生するはずです。

私はここに私のコードを添付しています

    package csv;
    import javax.mail.PasswordAuthentication;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.BodyPart;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;

    public class email {

public void send(String recipeintEmail, 
        String subject, 
        String messageText,String[] attachments) 
        throws MessagingException, AddressException {
    /*
       It is a good practice to put this in a java.util.Properties 
       file and encrypt password. Scroll down 
       to comments below to see 
       how to use java.util.Properties in JSF context. 
    */
    String senderEmail = "our email address";
    String senderMailPassword = "password";
    String gmail = "smtp.gmail.com";

    Properties props = System.getProperties();

    props.put("mail.smtp.user", senderEmail);
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "465");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.debug", "true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", 
          "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

    // Required to avoid security exception.
    email.MyAuthenticator authentication = 
          new email.MyAuthenticator(senderEmail,senderMailPassword);
    Session session = 
          Session.getDefaultInstance(props,authentication);
    session.setDebug(true);

    MimeMessage message = new MimeMessage(session);

    BodyPart messageBodyPart = new MimeBodyPart();      
    messageBodyPart.setText(messageText);

    // Add message text
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // Attachments should reside in your server.
    // Example "c:\file.txt" or "/home/user/photo.jpg"

    for (int i=0; i < attachments.length; i++) {        

        messageBodyPart = new MimeBodyPart();       
        DataSource source = new FileDataSource(attachments[i]);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(attachments [i]);          
        multipart.addBodyPart(messageBodyPart) ;  
    }



    message.setContent(multipart);                
    message.setSubject(subject);
    message.setFrom(new InternetAddress(senderEmail));
    message.addRecipient(Message.RecipientType.TO,
        new InternetAddress(recipeintEmail));

    Transport transport = session.getTransport("smtps");
    transport.connect(gmail,465, senderEmail, senderMailPassword);
    transport.sendMessage(message, message.getAllRecipients());

    transport.close();

}

private class MyAuthenticator extends javax.mail.Authenticator {
    String User;
    String Password;
    public MyAuthenticator (String user, String password) {
        User = user;
        Password = password;
    }

    @Override
    public PasswordAuthentication getPasswordAuthentication() {
        return new javax.mail.PasswordAuthentication(User, Password);
    }
}


public static void main(String args[]) throws MessagingException
{
    // email e=new email();
   // String at[]={"c:/COPYRIGHT.txt"};
  //  e.send("xyz@gmail.com", "hello","test"  )");
}

}
4

4 に答える 4

4

これを行う確実な方法はありません。このブログ投稿で説明されている手順を試すことはできますが、すべての種類のメール サーバー/リレー セットアップで動作することが保証されているわけではありません。

URL とともにアクティベーション キーをユーザーに送信します。これにより、ユーザーがログインしたり、提供されているものを使用したりしたい場合は、有効な電子メール ID を提供する必要があります。

于 2012-03-24T03:57:30.687 に答える
2

検証のために電子メールの送信に固執する場合は、偽の電子メールアドレスの数を減らすために、ユーザーが登録しているものにアクセスできるようにする前に、電子メール検証リンクを送信することを明確にすることをお勧めします。テストを実施し、登録フォームのラベルに若干の変更を加えると、無効なメールレートが大幅に低下しました。

警告の一言。メールの送信を使用してメールが有効かどうかを確認し、特に消費者向けドメイン(Yahoo、GMail、AOLなど)で無効なアドレスに大量のメールを送信している場合は、スパマーとしてフラグが立てられるリスクがあります。ハードバウンス(無効なアドレスに送信)は、レピュテーションスコアに影響します。数か月前に、電子メールを検証するさまざまな方法についてブログエントリを作成しました。これは、登録者を検証するための無料の方法と商用の方法の両方で役立つ可能性があります。

于 2012-03-27T12:38:04.017 に答える
0

これを解決する 1 つの方法は、返送されたメッセージを追跡することです。しかし、このアプローチには、基準が不均一であるため、いくつかの問題があります。

それでも、何もしないより何かをする価値があるかもしれません。ユーザーが電子メールを受信して​​応答していないか、電子メール アドレス自体が間違っているかを知ることが重要になる場合があります。

次のリンクを確認してください: http://www.oracle.com/technetwork/java/faq-135477.html#bounce

リンクからのこの抜粋を参照してください。

Q: メッセージを配信できない場合、失敗メッセージが返されます。これらの「バウンス」メッセージを検出するにはどうすればよいですか?

A: このようなエラーを報告するためのインターネット標準 (multipart/report MIME タイプ、RFC1892 を参照) はありますが、まだ広く実装されていません。RFC1211 では、多数の例を含め、この問題について詳しく説明しています。

インターネット電子メールでは、特定のメールボックスまたはユーザー名の存在は、メッセージを配信する最終的なサーバーによってのみ決定されます。メッセージは、エンド サーバーに到達する前に、(エラーを検出できない) 複数のリレー サーバーを通過する場合があります。

通常、エンド サーバーがこのようなエラーを検出すると、失敗の理由を示すメッセージを元のメッセージの送信者に返します。このような配信ステータス通知をカバーするインターネット標準は多数ありますが、多くのサーバーはこれらの新しい標準をサポートしておらず、代わりにそのような失敗メッセージを返すアドホック手法を使用しています。

これにより、「バウンスされた」メッセージを問題の原因となった元のメッセージと関連付けることが非常に困難になります。(この問題は JavaMail とは完全に無関係であることに注意してください。) JavaMail には、配信ステータス通知の解析のサポートが含まれるようになりました。詳細については、JavaMail パッケージの NOTES.txt ファイルを参照してください。

この問題に対処するための手法やヒューリスティックは数多くありますが、完璧なものはありません。1 つの手法は、 http://cr.yp.to/proto/verp.txtで説明されている可変エンベロープ リターン パスです。

于 2015-08-06T12:01:02.363 に答える