Отправка почты через сервер Google

Рейтинг: 1Ответов: 1Опубликовано: 23.02.2015

Возможно ли заменить реальный адрес, с которого было отправлено письмо?

public class MailSender {

    private String username;
    private String password;
    private Properties props;

    public MailSender(String username, String password) {
        this.username = username;
        this.password = password;

        props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
    }

    public void send(String subject, String text, String toEmail) {
        Session session = Session.getDefaultInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try {
            Message message = new MimeMessage(session);
            //от кого
            message.setFrom(new InternetAddress("admin@example.com","Admin"));
            //кому
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
            //тема сообщения
            message.setSubject(subject);
            //текст
            message.setText(text);

            //отправляем сообщение
            Transport.send(message);
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        MailSender sender = new MailSender("my_gmail@gmail.com", "12345");

        sender.send("This is Subject", "TLS: This is text!", "my_mail@yandex.ru");
    }
}

Сейчас, когда я отправляю это таким образом, мне приходит письмо от Admin (my_gmail@gmail.com), а я хочу, чтобы приходило от Admin (admin@example.com)

Ответы

▲ 2Принят

Вам нужно использовать отправку не через чей-то сервис почты (вроде Google и пр.), а напрямую на SMTP-сервер получателя. Т.е. если вы хотите отправить письмо на адрес my.mail@ya.ru, для начала необходимо узнать MX-сервер для домена ya.ru. Конечно же это можно сделать и программно. С самой отправкой можно поэкспериментировать через telnet. Тогда можно будет изменять любое из полей, в т.ч. и FROM. Когда станет понятно, как работает этот протокол, можно будет воспользоваться готовым клиентом для Java, который просто оборачивает "сырое" общение с SMTP-сервером получателя.