如何在Java中使用SMTP服务器发送带有动态发件人电子邮件地址的电子邮件?

3
我将使用以下代码发送电子邮件: ```html

我将使用以下代码发送电子邮件:

```
public static void main(String args[]) throws AddressException,    MessagingException
{
    SendMail javaEmail = new SendMail();
    javaEmail.setMailServerProperties();
    javaEmail.draftEmailMessage();
    javaEmail.sendEmail();
}

private void setMailServerProperties()
{
    Properties emailProperties = System.getProperties();
    emailProperties.put("mail.smtp.port", "586");
    emailProperties.put("mail.smtp.auth", "true");
    emailProperties.put("mail.smtp.starttls.enable", "true");
    mailSession = Session.getDefaultInstance(emailProperties, null);
}

private MimeMessage draftEmailMessage() throws AddressException, MessagingException
{
    String[] toEmails = { "aa@gmail.com" };
    String emailSubject = "Test email subject";
    String emailBody = "This is an email sent by http://www.howtodoinjava.com.";
    MimeMessage emailMessage = new MimeMessage(mailSession);
    /**
     * Set the mail recipients
     * */
    for (int i = 0; i < toEmails.length; i++)
    {
        emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
    }
    emailMessage.setSubject(emailSubject);
    /**
     * If sending HTML mail
     * */
    emailMessage.setContent(emailBody, "text/html");
    /**
     * If sending only text mail
     * */
    //emailMessage.setText(emailBody);// for a text email
    return emailMessage;
}

private void sendEmail() throws AddressException, MessagingException
{
    /**
     * Sender's credentials
     * */
    String fromUser = "user-email@gmail.com";
    String fromUserEmailPassword = "*******";

    String emailHost = "smtp.gmail.com";
    Transport transport = mailSession.getTransport("smtp");
    transport.connect(emailHost, fromUser, fromUserEmailPassword);
    /**
     * Draft the message
     * */
    MimeMessage emailMessage = draftEmailMessage();
    /**
     * Send the mail
     * */
    transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
    transport.close();
    System.out.println("Email sent successfully.");
}

我将Java邮件jar文件添加到项目中。在这一行中transport.connect(emailHost, fromUser, fromUserEmailPassword);,我必须设置密码。

但是我想要的是发送一封带有动态发件人地址的电子邮件。也就是说,用户可以设置他们的电子邮件地址,并从用户输入的电子邮件ID发送电子邮件到某个电子邮件ID。


非常期待您的建议。提前致谢。 - Android_kalai
1个回答

2

您可以在MimeMessage上设置发件人地址和发送者地址。它们不必相同。在您的draftEmailMessage方法中,添加以下内容:

emailMessage.setFrom(new InternetAddress(fromEmailAddress, fromName));
emailMessage.setSender(new InternetAddress(senderEmailAddress, senderName));

这里的fromEmailAddressfromName是用户输入的地址和名称(名称为可选项)。

相应地,senderEmailAdresssenderName是发件人的地址和名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接