在 Javax Mail API 中可以使用任何发件人地址是否很常见?

Is it common that one can use any sender address in Javax Mail API?

我是javax mail的新用户API。 (javax.mail.*)

通过尝试 vanilla 示例,似乎我可以通过使用 setFrom()

设置地址从任何地址发送电子邮件而无需身份验证

我在企业邮件服务器上试过了,它在没有警告的情况下工作。

这与我的常识相悖,即需要登录邮箱账号才能发送邮件。

这是 javax 邮件 API 和电子邮件服务器的普遍预期行为吗?

这是我使用的代码。

import java.io.UnsupportedEncodingException;

    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;

    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.mail.javamail.JavaMailSenderImpl;
    import org.springframework.mail.javamail.MimeMessageHelper;

    public class EmailTest {

        JavaMailSenderImpl mailSender;
        MimeMessage message;
        MimeMessageHelper helper;

        @Before
        public void setUp() {

            mailSender = new JavaMailSenderImpl();

            mailSender.setHost("smtp.company.com" ); //<some smtp host>

            message = mailSender.createMimeMessage();
            helper = new MimeMessageHelper(message);


        }

        @Test
        public void sendEmail() {

            try {

                helper.setFrom("john@company.com", "john doe");
                helper.setTo("jane@company.com");
                helper.setSubject("test subject");
                helper.setText("Test Text");

                mailSender.send(message);
            } catch (MessagingException e) {

                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {

                e.printStackTrace();
            }
        }


    }

这不是 Java 特有的。邮件中的发件人地址只是一个您可以任意填写的字段,无论采用何种技术。但是,许多邮件服务器会拒绝您尝试在不使用您自己的电子邮件的情况下发送的电子邮件。确实允许任何发件人地址的电子邮件服务器将需要某种其他类型的身份验证

编辑:与字母进行比较。发送旧学校信件(又名蜗牛邮件)时,您可以将任何地址作为发件人。 post 办公室不在乎,只要您支付运费即可。以完全相同的方式,邮件服务器通常不关心。

编辑 2:但是,如果您试图冒充或误导他人,您可能 运行 陷入法律问题。当您将唐老鸭作为发件人时,没有人会在意。如果你把唐纳德·特朗普作为发件人放在上面,你可能会被起诉要求赔偿比你想象的更多的钱。这适用于普通邮件和电子邮件。