не могу отправить электронное письмо от liferay - PullRequest
1 голос
/ 01 декабря 2011
try {
    InternetAddress to = new InternetAddress("tehilar20@gmail.com");
    InternetAddress from = new InternetAddress("tehilar20@gmail.com");
    String sub = new String("test");
    String body = new String("test-mail");
    MailMessage msg = new MailMessage();
    msg.setTo(to);
    msg.setFrom(from);
    msg.setBody(body);
    msg.setSubject(sub);
    MailServiceUtil.sendEmail(msg);
    MailEngine.send(from, to, sub, body);
} catch (Exception e) {
    System.out.println("can't send mail");
}
MailServiceUtil.sendEmail(msg);

этот путь просто не работает

MailEngine.send(from, to, sub, body);

этот путь дает мне эту ошибку:

Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1

Что я должен сделать, чтобы это работало?

Ответы [ 5 ]

1 голос
/ 08 октября 2013

для отправки электронной почты от Liferay Я рекомендую использовать шину сообщений.Для этой цели есть два пункта назначения.Вы можете найти полный пример в моем GitHub хранилище.Ниже приведен пример кода, который использует класс SubscriptionSender, который, в свою очередь, использует шину сообщений.

            SubscriptionSender subscriptionSender = new SubscriptionSender();

        subscriptionSender.setSubject("Lista degli utenti disattivati");
        subscriptionSender.setBody(emailBody.toString());
        subscriptionSender.setUserId(user.getUserId());
        subscriptionSender.setCompanyId(user.getCompanyId());
        subscriptionSender.setFrom("noreply@liferay.com", "Liferay Portal");
        subscriptionSender.setHtmlFormat(false);
        subscriptionSender.setMailId("user", user.getUserId());

        subscriptionSender.addRuntimeSubscribers(
            user.getEmailAddress(),
            user.getFullName());

        List<EmailAddress> emails = (List<EmailAddress>) user.getEmailAddresses();
        if (emails.size() > 0) {
            if (_log.isInfoEnabled()) {
                _log.info("User " + user.getUserId() +
                    " has additional emails address");
            }
            for (EmailAddress emailAddress : emails) {
                subscriptionSender.addRuntimeSubscribers(
                    emailAddress.getAddress(),
                    (String) user.getFullName());

            }
        }

        subscriptionSender.flushNotificationsAsync();

Полный исходный код можно найти по адресу SendMail.java

1 голос
/ 01 декабря 2011

Скорее всего, проблема в том, что вы подключаетесь по протоколу SMTP без SSL. Если это на основе JavaMail, убедитесь, что вы используете протокол SMTP, так как это SMTP с SSL. Также убедитесь, что вы включили аутентификацию. См. FAQ по JavaMail на GMail

1 голос
/ 01 декабря 2011

Вы отметили «Использовать безопасное сетевое соединение» в разделе «Исходящий SMTP-сервер» на странице конфигурации почты?

Вы также можете попробовать установить «Вручную указать дополнительные свойства JavaMail, чтобы переопределить вышеуказанную конфигурацию». до

mail.smtp.auth=true
mail.smtp.port=465
mail.smtp.socketFactory.port=465
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback=false
1 голос
/ 01 декабря 2011

Вам не хватает свойств аутентификации, проверьте this для полных примеров.

0 голосов
/ 24 сентября 2014

Вот конфигурация GMail в portal-ext.properties, которая работала для меня годами:

mail.session.mail.pop3.host=localhost
mail.session.mail.pop3.password=
mail.session.mail.pop3.port=110
mail.session.mail.pop3.user=
mail.session.mail.smtp.auth=true
mail.session.mail.smtp.host=smtp.gmail.com
mail.session.mail.smtp.port=465
mail.session.mail.smtp.password=<MY-PASSWORD-ON-GMAIL>
mail.session.mail.smtp.user=<MY-USERNAME-ON-GMAIL-(WITHOUT-@GMAIL.COM)>
mail.session.mail.store.protocol=pop3
mail.session.mail.transport.protocol=smtp
mail.session.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.session.mail.smtp.starttls.enable=true
...