Письмо, отправленное через сервлет с использованием JavaMail API, не проходит - PullRequest
2 голосов
/ 05 марта 2012

Ниже приведен мой код, который не дает мне ошибки, но электронная почта также не получена в моей учетной записи.Я просмотрел все посты об этой вещи и изменил свой код соответственно.Я действительно новичок в этом, поэтому этот вопрос может показаться глупым, но все же любые указания / предложения приветствуются.Также сервлет будет работать на Google App Engine.И я использую имя пользователя и пароль моей учетной записи Gmail вместо abc@gmail.com и пароля.Благодарю.

import java.io.IOException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserFeedback extends HttpServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse res) 
{
    sendFeedback(req, res);
}

private void sendFeedback(HttpServletRequest req, HttpServletResponse res)
{
    String from = null, sub = null, msg = null;
    String host = "smtp.gmail.com", username = "abc@gmail.com", password = "password";
    Session session = null;
    MimeMessage email = null;
    Transport transport = null;

    sub = req.getParameter("subject");
    from = req.getParameter("sender");
    msg = req.getParameter("message");
    msg = "From: " + from + "\n" + msg;

    Properties props = System.getProperties();
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.host", host);
    props.put("mail.smtp.user", username);
    props.put("mail.smtp.password", password);
    props.put("mail.smtp.port", "465");
    props.put("mail.smtp.auth", "true");
    props.put("mail.debug", "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");

    session = Session.getDefaultInstance(props, new javax.mail.Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("abc@gmail.com", "password");}});
    session.setDebug(true);

    email = new MimeMessage(session);
    try 
    {
        email.setSender(new InternetAddress(username));
        email.setRecipients(Message.RecipientType.TO, InternetAddress.parse("abc@gmail.com"));
        email.setSubject(sub);
        email.setContent(msg, "text/plain");
    }
    catch (AddressException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (MessagingException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try 
    {
        Transport.send(email);
    } 
    catch (NoSuchProviderException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (MessagingException e)
    {
        e.printStackTrace();
    }
}
 }

Ответы [ 3 ]

0 голосов
/ 06 марта 2012

Вы используете:

Properties props = System.getProperties();

Используйте это вместо:

Properties props = new Properties();

Если это не поможет опубликовать журналы сервера, которые показывают, что электронное письмо уже отправлено.

0 голосов
/ 29 марта 2012

Это один тип приложения для отправки почты ..... И его статическое приложение, его работало, и мы разработали динамическое приложение только из этого ... так что попробуйте один раз ... Добавить этот JAR-файлы dsn.jar, imap.jar, mailapi.jar, pop3.jar, smtp.jar.

package Javamail;
/*
Some SMTP servers require a username and password authentication before you
can use their Server for Sending mail. This is most common with couple
of ISP's who provide SMTP Address to Send Mail.

This Program gives any example on how to do SMTP Authentication
(User and Password verification)

This is a free source code and is provided as it is without any warranties and
it can be used in any your code for free.

*/

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;

/*
  To use this program, change values for the following three constants,
    SMTP_HOST_NAME -- Has your SMTP Host Name
    SMTP_AUTH_USER -- Has your SMTP Authentication UserName
    SMTP_AUTH_PWD  -- Has your SMTP Authentication Password
  Next change values for fields
  emailMsgTxt  -- Message Text for the Email
  emailSubjectTxt  -- Subject for email
  emailFromAddress -- Email Address whose name will appears as "from" address
  Next change value for "emailList".
  This String array has List of all Email Addresses to Email Email needs to be sent to.
  Next to run the program, execute it as follows,
  SendMailUsingAuthentication authProg = new SendMailUsingAuthentication();
*/

public class SendmailUsejavamail
{

  private static final String SMTP_HOST_NAME = "smtp.gmail.com";
  private static final String SMTP_AUTH_USER = "aaaa@gmail.com";
  private static final String SMTP_AUTH_PWD  = "xxxxxxxxx";

  private static final String emailMsgTxt      = "Online Order Confirmation Message. Also include the Tracking Number.";
  private static final String emailSubjectTxt  = "Order Confirmation Subject";
  private static final String emailFromAddress = "bbbbb@gmail.com";

  // Add List of Email address to who email needs to be sent to
  private static final String[] emailList = {"abc@gmail.com", "abcd@gmail.com"};

  public static void main(String args[]) throws Exception
  {
    SendmailUsejavamail smtpMailSender = new SendmailUsejavamail();
    smtpMailSender.postMail( emailList, emailSubjectTxt, emailMsgTxt, emailFromAddress);
    System.out.println("Sucessfully Sent mail to All Users");
  }

  public void postMail( String recipients[ ], String subject,
                            String message , String from) throws MessagingException
  {
    boolean debug = false;

     //Set the host smtp address
     Properties props = new Properties();
     props.put("mail.smtp.host", SMTP_HOST_NAME);
     props.put("mail.smtp.auth", "true");
    Authenticator auth = new SMTPAuthenticator();
    Session session = Session.getDefaultInstance(props, auth);
    session.setDebug(debug);

    // create a message
    Message msg = new MimeMessage(session);

    // set the from and to address
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);
    InternetAddress[] addressTo = new InternetAddress[recipients.length];
    for (int i = 0; i < recipients.length; i++)
    {
        addressTo[i] = new InternetAddress(recipients[i]);
    }
    msg.setRecipients(Message.RecipientType.TO, addressTo);
    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
 }
/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
private class SMTPAuthenticator extends javax.mail.Authenticator
{

    public PasswordAuthentication getPasswordAuthentication()
    {
        String username = SMTP_AUTH_USER;
        String password = SMTP_AUTH_PWD;
        return new PasswordAuthentication(username, password);
    }
}

}
0 голосов
/ 06 марта 2012

Вы должны использовать одну из многих реализаций Facade для JavaMail. Значительно очистит ваш код.

Чтобы узнать, работает ли этот код, напишите модульный тест и используйте:

Это даст вам быстрый ответ

...