2013-05-08 8 views
1

Я написал код Java для отправки почты, которая дает исключение, когда я использую номер порта 587 и все еще работает без остановки, когда я использую порт 465. Я использую Tomcat, и я не использую знаете, есть ли конфигурация. Mail.javaJava Отправка почты, gmail с SMTP

public class Mail { 
     String to; 
     String from; 
     String message; 
     String subject; 
     String smtpServ; 
     //getter and setter 
     public int sendMail(){ 
      try 
      { 
       Properties props = System.getProperties(); 
       props.put("mail.transport.protocol", "smtp"); 
       props.put("mail.smtp.starttls.enable","true"); 
       props.put("mail.smtp.host","smtp.gmail.com"); 
       props.put("mail.smtp.auth", "true"); 
       props.put("mail.smtp.port", "456"); 
       Authenticator auth = new SMTPAuthenticator(); 
       Session session = Session.getInstance(props, auth); 
       Message msg = new MimeMessage(session); 
       msg.setFrom(new InternetAddress(from)); 
       msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to,false)); 
       msg.setSubject(subject); 
       msg.setText(message); 
       msg.setHeader("MyMail", "Mr. XYZ"); 
       msg.setSentDate(new Date()); 
       Transport.send(msg); 
       System.out.println("Message sent to"+to+" OK."); 
       return 0; 
      } 
      catch (Exception ex) 
      { 
       ex.printStackTrace(); 
       System.out.println("Exception "+ex); 
       return -1; 
      } 
     } 
    } 


public class SMTPAuthenticator extends javax.mail.Authenticator { 
     @Override 
     public PasswordAuthentication getPasswordAuthentication() { 
      String username = "***@gmail.com";   // specify your email id here (sender's email id) 
      String password = "***";          // specify your password here 
      return new PasswordAuthentication(username, password); 
     } 
    } 

index.jsp:

<body> 
<form action="sendMail.jsp" method="POST"> 
<input type="text" name="to" value="" /> 
<input type="text" name="subject" value="" /> 
<textarea name="message" rows="8" cols="30"> 
</textarea> 
<input type="submit" value="Send Mail" /> 

sendMail.jsp

<jsp:useBean id="mail" scope="session" class="mailing.Mail" /> 
<jsp:setProperty name="mail" property="to" param="to" /> 
<jsp:setProperty name="mail" property="from" value="****@gmail.com" /> 
<jsp:setProperty name="mail" property="smtpServ" value="smtp.gmail.com" /> 
<jsp:setProperty name="mail" property="subject" param="subject" /> 
<jsp:setProperty name="mail" property="message" param="message" /> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
... 
<body> 
<% 
String to = mail.getTo(); 
int result; 
result = mail.sendMail(); 
} 
%> 

ответ

2

Этот код работает нормально. Попробуйте

public static void sendEmail(Email mail) { 

String host = "smtp.gmail.com"; 
String from = "YOUR_GMAIL_ID"; 
String pass = "YOUR_GMAIL_PASSWORD"; 
Properties props = System.getProperties(); 
props.put("mail.smtp.starttls.enable", "true"); // added this line 
props.put("mail.smtp.host", host); 
props.put("mail.smtp.user", from); 
props.put("mail.smtp.password", pass); 
props.put("mail.smtp.port", "587"); 
props.put("mail.smtp.auth", "true"); 

// Get the default Session object. 
Session session = Session.getDefaultInstance(props, null); 

try { 
    // Create a default MimeMessage object. 
    MimeMessage message = new MimeMessage(session); 

    // Set sender 
    message.setFrom(new InternetAddress("Senders_EMail_Id")); 

    // Set recipient 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("RECIPIENT_EMAIL_ID")); 

    // Set Subject: header field 
    message.setSubject("SUBJECT"); 

    // set content and define type 
    message.setContent("CONTENT", "text/html; charset=utf-8"); 

    Transport transport = session.getTransport("smtp"); 
    transport.connect(host, from, pass); 
    transport.sendMessage(message, message.getAllRecipients()); 
    transport.close(); 
    } catch (MessagingException mex) { 
    System.out.println(mex.getLocalizedMessage()); 
} 

}

+0

это дает мне ошибку в получении приветствия. Msg – ftning

+0

это работает, thx :) – ftning

+0

gr8. Гуд услышать это :) –

0

В коде у вас есть порт 456. Это не сработает.

+0

Да @Michal Borek я имею в виду 465, это все еще работают без остановки. – ftning

0

да порт 487 не будет работать

здесь пример кода

S

tring host = "smtp.gmail.com"; 
     String from = "your gmail account"; 
     String pass = "your gmail password"; 
     Properties props = System.getProperties(); 
     props.put("mail.smtp.starttls.enable", "true"); // added this line 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.user", from); 
     props.put("mail.smtp.password", pass); 
     props.put("mail.smtp.port", "587"); 
     props.put("mail.smtp.auth", "true"); 

     Session session = Session.getDefaultInstance(props, null); 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     InternetAddress toAddress = new InternetAddress(email); 
     message.addRecipient(Message.RecipientType.TO, toAddress); 

     message.setSubject("Subject of the message"); 
     message.setText("Text Of the Message"); 

     Transport transport = session.getTransport("smtp"); 
     transport.connect(host, from, pass); 
     transport.sendMessage(message, message.getAllRecipients()); 
     transport.close(); 
Смежные вопросы