【问题标题】:Why senders email does not show up while using javaMail API in JSP?为什么在 JSP 中使用 javaMail API 时不显示发件人电子邮件?
【发布时间】: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


【解决方案1】:

一般来说,邮件服务器不会让您发送看似来自任意地址的邮件。如果您想从特定的其他地址发送邮件,请参阅this Gmail help page

【讨论】:

  • @Bill...我或多或少地使用下面的链接来了解 Javamail api 和 jsp。下面链接中的代码说明用户可以从 EMAIL 地址获得两者,但我不确定发布代码的人是否能够接收来自发件人的电子邮件。我已经浏览了你的链接,我会试一试,但在此之前我会在我的代码中做更多的调整,然后会在这里再次发布。 link to the example:
猜你喜欢
  • 1970-01-01
  • 2014-06-03
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2018-12-18
相关资源
最近更新 更多