【发布时间】:2015-06-08 11:53:40
【问题描述】:
我编写了一个示例 JSP 代码来使用 JavaMail API 向另一个用户发送电子邮件。该表单具有发件人邮箱、主题框和 cmets 部分。所有三个 html 字段都将使用 jsp 文件中的 request.getParameter() 检索。电子邮件正在从主机(smtp.gmail.com)完美发送,但是当我登录 gmail 时,我看到它是以我自己的身份发送的(换句话说,为我自己发送电子邮件)。以下是我一直在处理的示例代码:
'<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ page isErrorPage="true" %>
<%
String result;
// Recipient's email ID needs to be mentioned.
String to = "toABC@gmail.com";
final String username = "toABC@gmail.com";
final String password = "somePassword";
// Sender's email ID needs to be mentioned
String from = request.getParameter("senderEmail");
// Get system properties object
Properties properties = new Properties();
// Setup mail server
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
Session mailSession = Session.getInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(mailSession);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject(request.getParameter("subject"));
// Now set the actual message
message.setText(request.getParameter("content"));
// Send message
Transport.send(message);
result = "Sent message successfully....";
}catch (MessagingException ex) {
ex.printStackTrace();
result = "Error: unable to send message....";
out.println("<br>");
out.println("<p>" + ex.getMessage() +" </p>");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<p align="center">
<%
out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>`
下面是我的 HTML 页面:
<html>
<body>
<form action="htmlEmail.jsp" method="post">
<table border="0" width="35%" align="center">
<caption><h2>Send New E-mail</h2></caption>
<tr>
<td width="50%">Sender email address </td>
<td><input type="text" name="senderEmail" size="50"/></td>
</tr>
<tr>
<td>Subject </td>
<td><input type="text" name="subject" size="50"/></td>
</tr>
<tr>
<td>Content </td>
<td><textarea rows="10" cols="39" name="content"></textarea> </td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Send"/></td>
</tr>
</table>
</form>
</body>
</html>
在 HTML 页面中,我输入了发件人电子邮件地址,当我在服务器上运行上述代码后打开我的 Gmail 帐户时,我认为该地址会显示为发件人电子邮件。相反,我收到了来自“toABC@gmail.com”的电子邮件。我的问题是,“为什么我没有收到电子邮件,因为它是由“fromXYZ@gmail.com”(以 html 表单输入)发送的?”。正如您在代码中看到的,我使用 message.setFrom(from) 作为发件人。然后,这应该在我的电子邮件中显示为发件人。感谢您的帮助。
【问题讨论】:
-
您确定
from找到了正确的值吗?尝试在内容中发送它,以确保它没有将from设置为 null 并默认为您的电子邮件。 -
@stvcisco ...我已将“from”字符串连接到 message.setText(request.getParameter("content") +" "+from)。我可以在收到的电子邮件内容中看到 fromXYZ@gmail.com。请记住,它在内容中,而不是发件人。如上所述,发件人仍然是我自己。
标签: java jsp email smtp jakarta-mail