簡體   English   中英

JavaMail - 多個發件人

[英]JavaMail - multiple senders

我有一個簡單的 javamail 類來通過 SMTP 發送電子郵件。 只要我只從一個地址發送電子郵件,它就可以工作。 如果我嘗試使用另一個地址,它會出於某種原因引發此異常:

com.sun.mail.smtp.SMTPSendFailedException: 550 5.1.0 Use your own address, please.

這是我的課:

public class EmailSender {
    private static final String HOST = "xxxx.xxxxxx.xx";
    private static final String PORT = "xx";

    public static boolean sendMail(String from, String to, String pass, String subject, String text) {
        Properties properties = new Properties();

        properties.setProperty("mail.smtp.host", HOST);
        properties.setProperty("mail.smtp.port", PORT);
        properties.setProperty("mail.smtp.auth", "true");
        properties.setProperty("mail.user", from);
        properties.setProperty("mail.password", pass);

        Session session = Session.getDefaultInstance(properties, new CustomAuthenticator(from, pass));

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject);
            message.setText(text);

            Transport.send(message);

            return true;
        } catch (MessagingException e) {
            e.printStackTrace();
            return false;
        }
    }
}

如果您想知道,CustomAuthenticator 類如下所示:

public class CustomAuthenticator extends Authenticator {
    private String user;
    private String pw;

    public CustomAuthenticator(String username, String password) {
        super();
        this.user = username;
        this.pw = password;
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(user, pw);
    }
}

所以我發現解決方案是使用 SMTPTransport 類。

public class EmailSender {
    private static final String HOST = "xxxx.xxxxxx.xx";
    private static final String PORT = "xx";

    public static boolean sendMail(String from, String to, String pass, String subject, String text) {
        Properties properties = new Properties();

        properties.setProperty("mail.smtp.port", PORT);
        properties.setProperty("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(properties, new CustomAuthenticator(from, pass));

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject);
            message.setText(text);

            SMTPTransport tp = (SMTPTransport) session.getTransport();
            tp.connect(HOST, from, pass);
            tp.sendMessage(message, message.getAllRecipients());
            tp.close();

            return true;
        } catch (MessagingException e) {
            e.printStackTrace();
            return false;
        }
    }
}

您的服務器不會讓您使用不屬於您的地址。 根據您的服務器,可能有一種方法可以說服它另一個地址也是您的。 通常“您的”是指“與您登錄時使用的帳戶相關聯的地址”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM