1

我已经编写了用于发送邮件的 java 代码,当我使用端口号 587 时会出现异常,并且当我使用端口号 465 时仍在运行而不会停止。我使用的是 Tomcat,我不知道是否需要进行配置。邮件.java

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" />

发送邮件.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();
}  
%>
4

3 回答 3

3

这段代码工作正常。试试这个

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());
}

}

于 2013-05-08T12:54:22.567 回答
0

在代码中你有 port 456。那是行不通的。

于 2013-05-08T12:43:07.730 回答
0

是的,端口 487 不起作用

这是一个示例代码

小号

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();
于 2013-05-08T13:46:38.940 回答