Страницы

Поиск по вопросам

Показаны сообщения с ярлыком gmail. Показать все сообщения
Показаны сообщения с ярлыком gmail. Показать все сообщения

четверг, 23 января 2020 г.

Доступ ненадежным приложениям при отправке почты с помощью Gmail

#java #gmail


СОбственно говоря,есть задача отправлять письма с помощью java. Покопавшись в сети,
прописал такой код:

public class MailSender {

    private final String username = "адрес ящика, с которого отправляем письмо";
    private final String password = "пароль к почтовому ящику";

    public  void MailSending(Message DataMessage){

        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.ssl.trust", "smtp.gmail.com");


        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(DataMessage.getFrom()));
            message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress(DataMessage.getTo()));
            message.setSubject(DataMessage.getSubject());
            message.setText(DataMessage.getBody());

            Transport.send(message); System.out.println("Email Sent successfully....");
        } catch (MessagingException mex){ mex.printStackTrace(); }

    }


Это дело работает и письма шлет,НО только в том случае, если я в настройках ящика
включаю "доступ к ненадежным приложениям"(в противном случае кидает в меня javax.mail.AuthenticationFailedException).
Я так думаю,что это делать не желательно(безопасность и  все такое), в тоже время решений
как обойти эту процедуру я не нашел. Можно ли изменить код так,чтобы проходила аутентификация,доступ
ненадежным приложениям был отключен и он не ругался?
    


Ответы

Ответ 1



Сначала включите двухэтапную аутентификацию После этого получите пароль для приложения и используйте его для отправки писем. Также стоит рассмотреть возможность отправки писем через свой сервер.

четверг, 2 января 2020 г.

Google считает письма спамом

#php #email #sendmail #gmail #spam


Добрый день, у меня проблема с регистрацией пользователей на сайте, гугл все письма
подтверждения считает спамом, из за этого я вижу многие пользователи просто забивают
на регистрацию и уходят. Какие заголовки нужно передавать что бы все было ок, или что
делать? Двиг сайта самописный, на php.

    Delivered-To: *******@gmail.com
Received: by 10.25.208.143 with SMTP id h137csp471735lfg;
        Thu, 23 Feb 2017 06:55:46 -0800 (PST)
X-Received: by 10.28.236.93 with SMTP id k90mr2954531wmh.40.1487861746329;
        Thu, 23 Feb 2017 06:55:46 -0800 (PST)
Return-Path: 
Received: from *******.freedomain.thehost.com.ua ([176.114.3.106])
        by mx.google.com with ESMTPS id 196si6753159wmw.120.2017.02.23.06.55.45
        for 
        (version=TLS1_2 cipher=AES128-SHA bits=128/128);
        Thu, 23 Feb 2017 06:55:46 -0800 (PST)
Received-SPF: softfail (google.com: domain of transitioning no-reply@mysite.net does
not designate 176.114.3.106 as permitted sender) client-ip=176.114.3.106;
Authentication-Results: mx.google.com;
       spf=softfail (google.com: domain of transitioning no-reply@mysite.net does
not designate 176.114.3.106 as permitted sender) smtp.mailfrom=no-reply@mysite.net
Message-ID: <58aef7f2.cd161c0a.52af6.98a5SMTPIN_ADDED_BROKEN@mx.google.com>
X-Google-Original-Message-ID: <172562218.20170223165545mysite.net>
Received: from *********.freedomain.thehost.com.ua ([176.114.3.106] helo=mysite.net)
by *********.freedomain.thehost.com.ua with esmtpa (Exim 4.82) (envelope-from )
id 1cguo5-0002y0-GN for myEmailName@gmail.com; Thu, 23 Feb 2017 16:55:45 +0200
Date: Thu, 23 Feb 2017 16:55:45 +0200
From: "Робот сервера mysite.net" 
X-Mailer: The Bat! (v3.99.3) Professional
Reply-To: "Робот сервера mysite.net" 
X-Priority: 3 (Normal)
To: "myEmailName" 
Subject: Создание аккаунта(mysite.net)
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit


        
        
        
        
        
        

Добро пожаловать на mysite.net

Ваш аккаунт "LADUSHKA" создан. Для завершения регистрации Вам необходимо в течение 3 дней перейти по ссылке. https://mysite.net/index.php?id=verification&hash=065f5117caeacc8642434e0024af61e0


Ответы

Ответ 1



Received-SPF: softfail говорит о том, что не настроен SPF. Добавьте в файл DNS зоны(mysite.net), запись: mysite.net. IN TXT "v=spf1 +a +mx -all" Также стоит настроить DKIM. Настройка для Ubuntu сервера: sudo apt update sudo apt install opendkim opendkim-tools vim /etc/opendkim.conf Правим конфиг: Syslog yes UMask 002 Domain mysite.net KeyFile /etc/mail/dkim.key Selector mail SubDomains yes OversignHeaders From Socket inet:8891@localhost Генерируем ключи: opendkim-genkey --domain=mysite.net --selector=mail --verbose sudo mv mail.private /etc/mail/dkim.key sudo chown root:root /etc/mail/dkim.key sudo chmod 400 /etc/mail/dkim.key cat mail.txt # Публичный ключ для записи домена Настраиваем sendmail: cd /etc/mail echo "INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl" >> sendmail.mc m4 sendmail.mc > sendmail.cf service opendkim restart service sendmail restart Добавляем TXT запись mail._domainkey: v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3D... Указанная в Content-type кодировка не относится к заголовкам письма. Как следствие Subject нужно кодировать. На php это делается так: $subject = mb_encode_mimeheader($subject, 'UTF-8', 'B', "\r\n", strlen('Subject: '));

Ответ 2



Google может посчитать письмо спамом по множеству причин, но вам следует обратить внимание на это: Received-SPF: softfail (google.com: domain of transitioning no-reply@mysite.net does not designate 176.114.3.106 as permitted sender) Скорее всего у вас в качестве адреса отправителя указан адрес, доменное имя которого не соответствует IP домена, с которого отправляется почта. Попробуйте указать реальный почтовый ящик, IP адрес домена которого является 176.114.3.106.

Ответ 3



Это самое важное, пропишите в DNS своего домена TXT SPF запись примерно следующего содержания: mysite.net. IN TXT "v=spf1 +a +mx +ip4:176.114.3.106 -all". Так же почитайте по поводу DKIM Если ваш хостер позволяет менять PTR запись для вашего ip поставьте в нее имя вашего домена с которого отправляется почта. Т.е. что бы PTR запись для ip давала такое же имя для которого A запись указывает на этот ip. Сейчас там стоит ....freedomain.thehost.com.ua который например спамассасину не нравится видимо из за наличия слова free а адресе. Текущее состояние проверяется просто nslookup ip-с-которого-шлется-почта В вашем письме нет Message-ID, его добавляет уже гугл при получении. Должно быть уникальное Message-ID оканчивающееся на @ваш-домен. Обычно это сам делает какой нибудь sendmail на вашей машине, через который вы по идее должны отправлять почту. Напишите каким нибудь почтовым клиентом письмо с такой же темой, как вы отправляете и посмотрите как кодируется заголовок. Сейчас у вас там просто текст, а должно быть что то вроде Subject: =?UTF-8?B?0KHQvtC30LTQsNC90LjQtSDQsNC60LrQsNGD0L3RgtCwKG15c2l0ZS5u?= =?UTF-8?B?ZXQp?= Русские буквы открытым текстом в заголовках письма нарушают стандарты. Напишите побольше текста. В несколько строк. Сейчас spamassasin говорит "Message body is only a URI in one line of text or for an image"

четверг, 21 марта 2019 г.

Элементы ActionBar в Gmail

Здравствуйте!
Возникла проблема с элементом в ActionBar помеченным как 'android:showAsAction="never"' - этот элемент создается когда нет кнопки menu у смартфона.
ab_notifications.xml


strings.xml
App Notifications
NotificationActivity.java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.ab_notifications, menu); return true; }
На планшете это выглядит так (у планшета нет кнопки menu):
На смартфоне это выглядит так (итем Overview появляется после нажатия кнопки menu):

НО, всё это фигня какая-то, так как приложение Gmail опять отличилось:


Как они сделали так, что на смартфоне кнопка menu не выводит ничего, а этот элемент всегда отображается в ActionBar?


Ответ

ActionBar на Android < 3.0 будет всегда показывать внизу. android:showAsAction="never" означает, что этот элемент меню будет внутри "⋮".

пятница, 15 марта 2019 г.

Доступ ненадежным приложениям при отправке почты с помощью Gmail

СОбственно говоря,есть задача отправлять письма с помощью java. Покопавшись в сети, прописал такой код:
public class MailSender {
private final String username = "адрес ящика, с которого отправляем письмо"; private final String password = "пароль к почтовому ящику";
public void MailSending(Message DataMessage){
Properties props = new Properties(); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } });
try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(DataMessage.getFrom())); message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress(DataMessage.getTo())); message.setSubject(DataMessage.getSubject()); message.setText(DataMessage.getBody());
Transport.send(message); System.out.println("Email Sent successfully...."); } catch (MessagingException mex){ mex.printStackTrace(); }
}
Это дело работает и письма шлет,НО только в том случае, если я в настройках ящика включаю "доступ к ненадежным приложениям"(в противном случае кидает в меня javax.mail.AuthenticationFailedException). Я так думаю,что это делать не желательно(безопасность и все такое), в тоже время решений как обойти эту процедуру я не нашел. Можно ли изменить код так,чтобы проходила аутентификация,доступ ненадежным приложениям был отключен и он не ругался?


Ответ

Сначала включите двухэтапную аутентификацию После этого получите пароль для приложения и используйте его для отправки писем.
Также стоит рассмотреть возможность отправки писем через свой сервер.

среда, 9 января 2019 г.

Google считает письма спамом

Добрый день, у меня проблема с регистрацией пользователей на сайте, гугл все письма подтверждения считает спамом, из за этого я вижу многие пользователи просто забивают на регистрацию и уходят. Какие заголовки нужно передавать что бы все было ок, или что делать? Двиг сайта самописный, на php.
Delivered-To: *******@gmail.com Received: by 10.25.208.143 with SMTP id h137csp471735lfg; Thu, 23 Feb 2017 06:55:46 -0800 (PST) X-Received: by 10.28.236.93 with SMTP id k90mr2954531wmh.40.1487861746329; Thu, 23 Feb 2017 06:55:46 -0800 (PST) Return-Path: Received: from *******.freedomain.thehost.com.ua ([176.114.3.106]) by mx.google.com with ESMTPS id 196si6753159wmw.120.2017.02.23.06.55.45 for (version=TLS1_2 cipher=AES128-SHA bits=128/128); Thu, 23 Feb 2017 06:55:46 -0800 (PST) Received-SPF: softfail (google.com: domain of transitioning no-reply@mysite.net does not designate 176.114.3.106 as permitted sender) client-ip=176.114.3.106; Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning no-reply@mysite.net does not designate 176.114.3.106 as permitted sender) smtp.mailfrom=no-reply@mysite.net Message-ID: <58aef7f2.cd161c0a.52af6.98a5SMTPIN_ADDED_BROKEN@mx.google.com> X-Google-Original-Message-ID: <172562218.20170223165545mysite.net> Received: from *********.freedomain.thehost.com.ua ([176.114.3.106] helo=mysite.net) by *********.freedomain.thehost.com.ua with esmtpa (Exim 4.82) (envelope-from ) id 1cguo5-0002y0-GN for myEmailName@gmail.com; Thu, 23 Feb 2017 16:55:45 +0200 Date: Thu, 23 Feb 2017 16:55:45 +0200 From: "Робот сервера mysite.net" X-Mailer: The Bat! (v3.99.3) Professional Reply-To: "Робот сервера mysite.net" X-Priority: 3 (Normal) To: "myEmailName" Subject: Создание аккаунта(mysite.net) MIME-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Добро пожаловать на mysite.net

Ваш аккаунт "LADUSHKA" создан. Для завершения регистрации Вам необходимо в течение 3 дней перейти по ссылке. https://mysite.net/index.php?id=verification&hash=065f5117caeacc8642434e0024af61e0


Ответ

Received-SPF: softfail говорит о том, что не настроен SPF.
Добавьте в файл DNS зоны(mysite.net), запись:
mysite.net. IN TXT "v=spf1 +a +mx -all"
Также стоит настроить DKIM.
Настройка для Ubuntu сервера:
sudo apt update sudo apt install opendkim opendkim-tools vim /etc/opendkim.conf
Правим конфиг:
Syslog yes UMask 002 Domain mysite.net KeyFile /etc/mail/dkim.key Selector mail SubDomains yes OversignHeaders From Socket inet:8891@localhost
Генерируем ключи:
opendkim-genkey --domain=mysite.net --selector=mail --verbose sudo mv mail.private /etc/mail/dkim.key sudo chown root:root /etc/mail/dkim.key sudo chmod 400 /etc/mail/dkim.key cat mail.txt # Публичный ключ для записи домена
Настраиваем sendmail:
cd /etc/mail echo "INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl" >> sendmail.mc m4 sendmail.mc > sendmail.cf service opendkim restart service sendmail restart
Добавляем TXT запись mail._domainkey:
v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3D...

Указанная в Content-type кодировка не относится к заголовкам письма. Как следствие Subject нужно кодировать. На php это делается так:
$subject = mb_encode_mimeheader($subject, 'UTF-8', 'B', "
", strlen('Subject: '));