Использование Javamail для соединения с SMTP-сервером Gmail игнорирует указанный порт и пытается использовать

Существует множество опций, например

  • Поместите файл mail.py вместе с другими файлами python (это работает, потому что текущий рабочий каталог находится на PYTHONPATH.
  • Сохраните копию mail.py в папке «/ lib / site-packages» среды anaconda python, чтобы она была доступна для любого скрипта python с использованием этой среды.
30
задан Bryan 2 January 2010 в 02:54
поделиться

2 ответа

В Java вы бы сделали нечто похожее на:

Transport transport = session.getTransport("smtps");
transport.connect (smtp_host, smtp_port, smtp_username, smtp_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();    

Обратите внимание на протокол 'smtpS'. Также свойства socketFactory больше не нужны в современных JVM, но вам может понадобиться установить 'mail.smtps.auth' и 'mail.smtps.starttls.enable' в 'true' для Gmail. Также может быть полезным 'mail.smtps.debug'.

.
32
ответ дан 27 November 2019 в 20:46
поделиться

Для тех, кто ищет полноценное решение, я заставил это работать со следующим кодом, основанным на ответе maximdim:

import javax.mail.*
import javax.mail.internet.*

private class SMTPAuthenticator extends Authenticator
{
    public PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication('email@gmail.com', 'test1234');
    }
}

def  d_email = "email@gmail.com",
        d_uname = "email",
        d_password = "password",
        d_host = "smtp.gmail.com",
        d_port  = "465", //465,587
        m_to = "testepscript@gmail.com",
        m_subject = "Testing",
        m_text = "Hey, this is the testing email."

def props = new Properties()
props.put("mail.smtp.user", d_email)
props.put("mail.smtp.host", d_host)
props.put("mail.smtp.port", d_port)
props.put("mail.smtp.starttls.enable","true")
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.socketFactory.port", d_port)
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
props.put("mail.smtp.socketFactory.fallback", "false")

def auth = new SMTPAuthenticator()
def session = Session.getInstance(props, auth)
session.setDebug(true);

def msg = new MimeMessage(session)
msg.setText(m_text)
msg.setSubject(m_subject)
msg.setFrom(new InternetAddress(d_email))
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to))

Transport transport = session.getTransport("smtps");
transport.connect(d_host, 465, d_uname, d_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
17
ответ дан 27 November 2019 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: