我已经编写了发送邮件的java代码,当我使用端口号587时它会发出异常,当我使用端口465时仍然没有停止运行。 我使用Tomcat,我不知道是否有配置。 Mail.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" />
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();
}
%>
答案 0 :(得分: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());
}
}
答案 1 :(得分:0)
在代码中,您有端口456
。那不会起作用。
答案 2 :(得分: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();