Страницы

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

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

суббота, 11 апреля 2020 г.

Правильная настройка sendmail на сервер

#email #sendmail

                    
В общем есть сервер на Debian, там есть PHP и sendmail, отправка почты с PHP через
sendmail худо-бедно настроена.Письма с сервера отправляются от имени root@domain.com
по-умолчанию, если в mail() не указывать заголовок From.А если задать дополнительный
заголовок From, например info@domain.com, то письма приходят либо от root@domain.com,
либо от info@, но с совершенно каким-то левым доменом после @ (и естественно попадает
в спам).Получать почту на сервере не нужно, нужно только чтобы она нормально отправлялась.
Собственно 2 вопроса в итоге:как поменять пользователя (ящик) по-умолчанию (чтобы не
от root@domain.com отправлялись письма, а с ящика поприличнее на том же домене)?как
настроить отправку писем с любого ящика на этом домене (*@domain.com), то есть чтоб
они приходили от соответствующего ящика (info@domain.com, admin@domain.com)?     


Ответы

Ответ 1



Для начала надо почитать как вызывать функцию mail() в РНР. Дальше делаем такой вызов: mail('someuser@example.net', $subj, $mailbody, $additional_headers, '-f from@domain.com'); Здесь очень важен параметр -f - т.к. именно он задает от какого пользователя уйдет почта.

пятница, 20 марта 2020 г.

Отправка почтовго сообщения из кода

#golang #sendmail


Может кто знает, как отправить сообщение из кода в Go?    


Ответы

Ответ 1



Примерно так package main import ( "log" "smtp" ) func main() { auth := smtp.PlainAuth("", "some@ya.ru", "password", "smtp.yandex.ru") err := smtp.SendMail("smtp.yandex.ru:25", auth, "from@ya.ru", []string{"to@ya.ru"}, []byte("Текст письма.")) if err != nil { log.Fatal(err) } } Еще примеры здесь: SendingMail.

четверг, 13 февраля 2020 г.

Как доставляется электронная почта?

#unix #sendmail #imap #pop3


Я вот не совсем понимаю, как идет доставка сообщений на почтовый сервер? Мы пишем
письмо с user@gmail.com на test@mail.ru. Что происходит на уровне системы? sendmail
(или другой мейл агент) доставляет письмо на указанный сервер (mail.ru) или на другой
(который прописан в mx-записи)? И самое главное - какому сервису он передается? sendmail-sendmail?
Pop3 и imap служат только для того чтобы отдавать почту пользователю? В общем сильно
не пинайте, а объясните концепцию или линк на толковую статью. Спасибо.
    


Ответы

Ответ 1



Предположим, мы написали письмо со своего ящика user@gmail.com для test@mail.ru. Из веб-формы письмо передаётся MTA (Mail Transfer Agent - почтовый агент) Google, который начинает его обработку. MTA может быть любым - sendmail, postfix, MS Exchange и т.п., порядок действий везде одинаковый. Вначале MTA выделяет из адреса отправителя имя домена (в нашем случае - mail.ru) и посылает DNS-запрос "какие MX-записи у этого домена?". Дело в том, что для почты есть свои собственные записи в DNS, так называемые MX-записи (MX - Mail Exchanger), в которых находятся имена (не IP-адреса, а именно имена почтовых серверов домена!). В ответ DNS присылает список имён почтовых серверов. MTA берёт один из полученных имён и посылает DNS-запрос "какой IP у этого имени?". DNS-сервер присылает в ответ адрес (возможно, не один) для имени, после чего MTA соединяется с этим адресом и по стандарному протоколу SMTP (или ESMTP) передаёт письмо почтовому серверу получателя. Сервер получателя кладёт письмо в своё внутреннее хранилище писем для test@mail.ru и ждёт пока пользователь подключится и прочитает свою почту. Пользователь может не использовать web-интерфейс, а подключаться к MTA при помощи отдельной программы - почтового клиента (Mozilla Thunderbird, The Bat и т.п.). Но всё дело в том, что протокол SMTP для этого не подходит, он создан для обмена данными между серверами. Здесь работают два других протокола - POP3 и IMAP. Для клиента разница между ними почти отсутствует, но внутренне они абсолютно непохожи. IMAP более современный и умный, POP3 более старый и поглупее. (Если есть возможность - выставляйте IMAP.) Эти протоколы ответственны за передачу почты между клиентской программой и MTA. Если SMTP однонаправленный (только отправка), то клиентские протоколы двунаправленные (отправка и получение). Есть ещё одна интересная деталь. MX-записей у домена может быть несколько. То есть у домена может быть несколько почтовых серверов. Казалось бы зачем это надо? Ведь у любого DNS-имени может быть несколько IP-адресов (A-записей), так зачем же усложнять картину? А затем, что у MX-записей есть то, чего нет у A-записей - приоритет. Все IP для одного имени равноприоритетны, но для MX-записей можно указывать их "вес". "Вес" - это неотрицательное целое число и чем оно меньше, тем выше приоритет этой записи. MTA всегда вначале пытается соединиться с сервером, имеющим более высокий приоритет и только если ему это не удалось, переходит к серверу с более низким приоритетом.

среда, 22 января 2020 г.

Как правильно организовать email рассылку

#email #sendmail


Всем привет.
Есть база email порядка 30 000 000, нужно сделать рассылку. Подскажите, как правильно
сделать рассылку, чтобы не попасть в черный список, какие есть ограничения на отправку,
одним словом, как это правильно сделать?
    


Ответы

Ответ 1



В первом комментарии Вам дали правильные ссылки и их надо все изучить. Из личного опыта не спама, но самостоятельных коммерческих рассылок: нюансов очень много. Чисто технические нюансы: правильные и действительные PTR и SPF записи, настроенная DKIM-подпись, отсутствие (изначально) домена и ip адреса в блэк-листах, указание в письмах заголовка list-unsubscribe и Precedence: bulk (junk, list, list-unsubscribe и т. п.), отправка писем только через SMTP. Требования к домену тоже существуют: возраст от года, но чем старше, тем лучше, (Обяз.) Хост, осуществляющий рассылку, должен иметь постоянный IP-адрес с корректно настроенным обратным DNS-запросом. При этом регистрационные данные владельца домена должны быть актуальными и доступными публично по протоколу WHOIS. Для корректной идентификации доменное имя должно быть содержательным, а не являться автоматическим адресом наподобие x.y.z.w-in-addr-arpa или dsl-4-3-2-1.provider.net. Делать рассылки лучше с поддоменов (promo.example.com, info.example.com), соответственно использовать почтовые адреса отправителя с этих поддоменов. Домен должен иметь хорошую почтовую репутацию, например, можно перед основной рассылкой в течении недели разослать несколько десятков тысяч писем по небольшой надежной базе подписчиков, с малым процентом отказов ("прогреть" домен). К письмам тоже много требований: одно письмо - один получатель, в письме обязательно должна быть возможность отписаться от рассылки, в теле письма должен быть указан в явном виде email получателя (а-ля Вы получили письмо на электронный адрес example@example.com так как...), письма в формате html с соблюдением кодировки и MIME типов, нельзя использовать сокращатели ссылок. Очень желательно, чтобы письма были персонализированными, как тема письма, так и тело, а не полностью идентичными. Самые простые варианты - использовать имя получателя в письме (из базы подписчиков), разные приветствия, в зависимости от времени отправления письма, указание города или региона подписчика (если есть в базе) и т.п.. Не использовать в письмах "стоп слова" спам фильтров и изображения с форматом популярных рекламных баннеров. Очень важно: слать письма надо только с разрешения подписчика, на его проверенный email, не тот который он только указал, но и подтвердил, например переходом по ссылке отправленной на него! Почему это важно: после определенного количества отказов от рассылки (специфично для каждого почтового сервиса) все письма пойдут в спам, многие посчитали письмо спамом (а иногда людям проще ткнуть кнопку спам, чем отписываться от рассылки) все письма пойдут в спам, отправили подряд несколько писем на несуществующие, заблокированные ящики - получили бан на домен, пока перед саппортом почтовика не "изивинитесь". Перед запуском рассылки надо проверить качество отправляемого письма, я пользуюсь этим сервисом . Советую зарегистрироваться в Кабинете почтового мастера на распространенных почтовых сервисах: Яндекс , Мэйл, Google. Там Вы сможете смотреть подробную статистику рассылок, получать уведомления и рекомендации. Очень удобно и информативно. Лично мое мнение: если бы мне надо было сейчас разослать 30 млн писем, я бы делал это частями, например 100 разных рассылок по 300 тыс с десятка почтовых серверов.

четверг, 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"

вторник, 24 декабря 2019 г.

Отправка формы при помощи JS?

#javascript #sendmail #google_spreadsheet


Добрый день, хочу поинтересоваться, кто-то делал отправку писем через гугл таблицы?
Т.е, проворачивал ли, кто-то вот такую схему "сайт -> гугл таблица -> почта" при помощи
js? Или же, можете ли вы, подсказать иной способ отправки форм с сайта, с использованием js?
    


Ответы

Ответ 1



Или же, можете ли вы, подсказать иной способ отправки форм с сайта, с использованием js? Да, такие варианты есть, например - использовать EmailJS. Другой вариант - использовать JS GMail API. Остальные варианты без труда ищутся по запросу send emails javascript. Добрый день, хочу поинтересоваться, кто-то делал отправку писем через гугл таблицы? Т.е, проворачивал ли, кто-то вот такую схему "сайт -> гугл таблица -> почта" при помощи js? Именно такая схема не имеет смысла, есть смысл просто параллельно организовать в коде отправку и письма, и лида в GD. Для работы с последним вы также можете найти множество примеров реализации в сети, включая документацию от самого Google.

воскресенье, 22 декабря 2019 г.

Отправляя письма через форму на сайте, письма приходят с неверной кодировкой

#email #php #sendmail


Здравствуйте! 
Написал простенький скрипт обратной формы на php + jquary.
Сам скрипт с функцией mail():
";   
echo "Ваш контактный телефон        :".$email."
"; echo "Время и дата :".$sug."
"; echo "Ваш запрос отправлен. Спасибо вам за ваш интерес к нашей компании!"; $from = 'test@mail.ru'; $emailTo = 'test@mail.ru'; $subject = '=?UTF-8?B?'.base64_encode('Запрос прайс листа с сайта: test').'?='; $headers = 'Content-type: text/plain; charset=utf-8'; $headers .= "From: ". $from ." <". $from ."> \r\n"; $body = "Ф.И.О. контактного лица: $name \n\nКонтактный телефон клиента: $email \n\nВремя и дата удобное для звонка ему:\n $sug"; $headers = 'C сайта: test <'.$emailTo.'>' . "\r\n" . 'Отправитель: ' . $name . "\r\n" ; $headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n"; mail($emailTo, $subject, $body, $headers, '-f'. $from ); $emailSent = true; }?> В данном скрипте проблему с заголовком письма решил, если письмо отправляю на локальном сервере в denwer и читаю их в Thunderbird то с кодировкой проблем нет, как только выложил его на виртуальный сервак и отправил письмо на почтовый ящик размещенный на mail.ru, появляются крокозябры: C я│п╟п╧я┌п╟: test п·я┌п©я─п╟п╡п╦я┌п╣п╩я▄: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣ Date: Mon, 24 Jun 2013 11:03:16 +0400 п╓.п≤.п·. п╨п╬п╫я┌п╟п╨я┌п╫п╬пЁп╬ п╩п╦я├п╟: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣ п п╬п╫я┌п╟п╨я┌п╫я▀п╧ я┌п╣п╩п╣я└п╬п╫ п╨п╩п╦п╣п╫я┌п╟: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣ п▓я─п╣п╪я▐ п╦ п╢п╟я┌п╟ я┐п╢п╬п╠п╫п╬п╣ п╢п╩я▐ п╥п╡п╬п╫п╨п╟ п╣п╪я┐: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣ Тема письма отображается верно. Прошу помощи разобраться в данной проблеме.


Ответы

Ответ 1



Ну как бы все пользуются для почты http://phpmailer.worxware.com/. Но в вашем случаи есть прям в документации ответ http://php.net/manual/en/function.mail.php : function mail_utf8($to, $subject = '(No subject)', $message = '', $from) { $header = 'MIME-Version: 1.0' . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" . 'From: Yourname <' . $from . ">\n"; mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header); }

Ответ 2



У меня тоже тело письма отправляло кракозябрами. Декодером лебедева проверил - оказалось что кракозябры в кодировке KOI8-R. Помог код преобразования KOI8-R в UTF-8. Сама страничка у меня в кодировке UTF-8. $mes = "Номер телефона: $tele"; /*Тело письма, которое неправильно отображалось*/ $in_charset = "KOI8-R"; $out_charset = "UTF-8"; iconv ($in_charset, $out_charset, $mes); /*Преобразуем*/ $send = mail($address, $sub, $mes,"Content-type:text/plain; charset=UTF-8" );

воскресенье, 8 декабря 2019 г.

Отправка почты средствами PHP через WAMP server

#php #email #sendmail


Здравствуйте! Обращаюсь к тем, кто смог настроить на локальном сервере отправку почты
средствами PHP. Очень необходима ваша помощь. 

Использую протокол IMAP(gmail или yandex)  и SMPT-сервер sendmail. При отправке постоянно
происходит ошибка «Connect timed out.», много всего прочитал, возможно кто-то смог
решить данную проблему или может необходимо использовать другой сервер для отправки почты.

Подключены расширения PHP: open_ssl, sockets;

Модуль Apache: ssl_module.

Система Windows 7, сервер WAMP Apache, php 5.

PHP-код:

$to       = em1@gmail.com';
$subject  = 'Testing sendmail.exe';
$message  = 'Hi, you just received an email using sendmail!';
$headers  = 'From: em2@gmail.com' . "\r\n" .
            'MIME-Version: 1.0' . "\r\n" .
            'Content-type: text/html; charset=utf-8';

mail($to, $subject, $message, $headers);

if(mail($to, $subject, $message, $headers))
    echo "Email sent";
else
    echo "Email sending failed";


Файл sendmail.ini (всё необходимое для изменения) :


smtp_server=smtp.gmail.ru 
smtp_port=25
smtp_ssl=none
default_domain=localhost
error_logfile=error.log
debug_logfile=debug.log
auth_username=my_user_name
auth_password=my_user_passw
pop3_server=
pop3_username=
pop3_password=
force_sender= em2@gmail.com
force_recipient= 
hostname=gmail.com


Файл php.ini раздел [mail function]

; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = 
;  -i
sendmail_path = "D:\Server\bin\wamp\sendmail\sendmail.exe -t"
;mail.force_extra_parameters =
mail.add_x_header = On


Файл crach.log:

15.07.08 09:10:31 : Connect timed out.


Файл debug.log:

15.07.08 09:10:21 ** --- MESSAGE BEGIN ---
15.07.08 09:10:21 ** To: em1@gmail.com 
15.07.08 09:10:21 ** Subject: Testing sendmail.exe 
15.07.08 09:10:21 ** X-PHP-Originating-Script: 0:test.php 
15.07.08 09:10:21 ** From: em2@gmail.com 
15.07.08 09:10:21 ** MIME-Version: 1.0 
15.07.08 09:10:21 ** Content-type: text/html; charset=utf-8 
15.07.08 09:10:21 ** 
15.07.08 09:10:21 ** Hi, you just received an email using sendmail! 
15.07.08 09:10:21 ** --- MESSAGE END --- 
15.07.08 09:10:21 ** Connecting to smtp.gamil.com:25  
15.07.08 09:10:31 ** Disconnected.
15.07.08 09:10:31 ** Disconnected.
15.07.08 09:10:31 ** Disconnected.
15.07.08 09:10:31 ** Disconnected.
15.07.08 09:10:31 ** Connect timed out. 


Часть файла crach.txt:

exception class   : EIdConnectTimeout  

exception message : Connect timed out.

main thread ($2740):

0041fa42 +000e sendmail.exe IdException 112 +1 EIdException.Toss

0044092e +014e sendmail.exe IdIOHandlerStack 279 +38 DoConnectTimeout

00440b4c +01d8 sendmail.exe IdIOHandlerStack 346 +55 TIdIOHandlerStack.ConnectClient

00444a9f +0063 sendmail.exe IdIOHandlerSocket 335 +13 TIdIOHandlerSocket.Open

0044157d +0235 sendmail.exe IdTCPClient 318 +53 TIdTCPClientCustom.Connect

00445cc8 +00a4 sendmail.exe IdExplicitTLSClientServerBase 257 +23 TIdExplicitTLSClient.Connect

0045ab7b +0017 sendmail.exe IdSMTP 373 +2 TIdSMTP.Connect

004b5f14 +1060 sendmail.exe sendmail 808 +326 initialization 76533378 +0010 kernel32.dll

BaseThreadInitThunk

thread $2570:

774b01a2 +0e ntdll.dll NtWaitForMultipleObjects

76533378 +10 kernel32.dll BaseThreadInitThunk


Ответы

Ответ 1



Вот работающий, только что проверял. [sendmail] smtp_server=smtp.googlemail.com smtp_port=465 smtp_ssl=auto error_logfile=log/error.log debug_logfile=log/debug.log auth_username=*************@gmail.com auth_password=************* pop3_server= pop3_username= pop3_password= force_sender=*************@gmail.com force_recipient= hostname=*************@gmail.com

вторник, 23 апреля 2019 г.

Как доставляется электронная почта?

Я вот не совсем понимаю, как идет доставка сообщений на почтовый сервер? Мы пишем письмо с user@gmail.com на test@mail.ru. Что происходит на уровне системы? sendmail (или другой мейл агент) доставляет письмо на указанный сервер (mail.ru) или на другой (который прописан в mx-записи)? И самое главное - какому сервису он передается? sendmail-sendmail? Pop3 и imap служат только для того чтобы отдавать почту пользователю? В общем сильно не пинайте, а объясните концепцию или линк на толковую статью. Спасибо.


Ответ

Предположим, мы написали письмо со своего ящика user@gmail.com для test@mail.ru. Из веб-формы письмо передаётся MTA (Mail Transfer Agent - почтовый агент) Google, который начинает его обработку. MTA может быть любым - sendmail, postfix, MS Exchange и т.п., порядок действий везде одинаковый.
Вначале MTA выделяет из адреса отправителя имя домена (в нашем случае - mail.ru) и посылает DNS-запрос "какие MX-записи у этого домена?". Дело в том, что для почты есть свои собственные записи в DNS, так называемые MX-записи (MX - Mail Exchanger), в которых находятся имена (не IP-адреса, а именно имена почтовых серверов домена!). В ответ DNS присылает список имён почтовых серверов. MTA берёт один из полученных имён и посылает DNS-запрос "какой IP у этого имени?". DNS-сервер присылает в ответ адрес (возможно, не один) для имени, после чего MTA соединяется с этим адресом и по стандарному протоколу SMTP (или ESMTP) передаёт письмо почтовому серверу получателя. Сервер получателя кладёт письмо в своё внутреннее хранилище писем для test@mail.ru и ждёт пока пользователь подключится и прочитает свою почту.
Пользователь может не использовать web-интерфейс, а подключаться к MTA при помощи отдельной программы - почтового клиента (Mozilla Thunderbird, The Bat и т.п.). Но всё дело в том, что протокол SMTP для этого не подходит, он создан для обмена данными между серверами. Здесь работают два других протокола - POP3 и IMAP. Для клиента разница между ними почти отсутствует, но внутренне они абсолютно непохожи. IMAP более современный и умный, POP3 более старый и поглупее. (Если есть возможность - выставляйте IMAP.) Эти протоколы ответственны за передачу почты между клиентской программой и MTA. Если SMTP однонаправленный (только отправка), то клиентские протоколы двунаправленные (отправка и получение).
Есть ещё одна интересная деталь. MX-записей у домена может быть несколько. То есть у домена может быть несколько почтовых серверов. Казалось бы зачем это надо? Ведь у любого DNS-имени может быть несколько IP-адресов (A-записей), так зачем же усложнять картину? А затем, что у MX-записей есть то, чего нет у A-записей - приоритет. Все IP для одного имени равноприоритетны, но для MX-записей можно указывать их "вес". "Вес" - это неотрицательное целое число и чем оно меньше, тем выше приоритет этой записи. MTA всегда вначале пытается соединиться с сервером, имеющим более высокий приоритет и только если ему это не удалось, переходит к серверу с более низким приоритетом.

среда, 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: '));

понедельник, 26 ноября 2018 г.

Отправка формы при помощи JS?

Добрый день, хочу поинтересоваться, кто-то делал отправку писем через гугл таблицы? Т.е, проворачивал ли, кто-то вот такую схему "сайт -> гугл таблица -> почта" при помощи js? Или же, можете ли вы, подсказать иной способ отправки форм с сайта, с использованием js?


Ответ

Или же, можете ли вы, подсказать иной способ отправки форм с сайта, с использованием js?
Да, такие варианты есть, например - использовать EmailJS. Другой вариант - использовать JS GMail API. Остальные варианты без труда ищутся по запросу send emails javascript
Добрый день, хочу поинтересоваться, кто-то делал отправку писем через гугл таблицы? Т.е, проворачивал ли, кто-то вот такую схему "сайт -> гугл таблица -> почта" при помощи js?
Именно такая схема не имеет смысла, есть смысл просто параллельно организовать в коде отправку и письма, и лида в GD. Для работы с последним вы также можете найти множество примеров реализации в сети, включая документацию от самого Google

среда, 24 октября 2018 г.

Отправляя письма через форму на сайте, письма приходят с неверной кодировкой

Здравствуйте! Написал простенький скрипт обратной формы на php + jquary. Сам скрипт с функцией mail() echo "Ваше Ф.И.О. :".$name."
"; echo "Ваш контактный телефон :".$email."
"; echo "Время и дата :".$sug."
"; echo "Ваш запрос отправлен. Спасибо вам за ваш интерес к нашей компании!";
$from = 'test@mail.ru'; $emailTo = 'test@mail.ru'; $subject = '=?UTF-8?B?'.base64_encode('Запрос прайс листа с сайта: test').'?='; $headers = 'Content-type: text/plain; charset=utf-8'; $headers .= "From: ". $from ." <". $from .">
"; $body = "Ф.И.О. контактного лица: $name

Контактный телефон клиента: $email

Время и дата удобное для звонка ему:
$sug";
$headers = 'C сайта: test <'.$emailTo.'>' . "
" . 'Отправитель: ' . $name . "
" ; $headers .= "Date: ". date('D, d M Y h:i:s O') ."
";
mail($emailTo, $subject, $body, $headers, '-f'. $from );
$emailSent = true; }?> В данном скрипте проблему с заголовком письма решил, если письмо отправляю на локальном сервере в denwer и читаю их в Thunderbird то с кодировкой проблем нет, как только выложил его на виртуальный сервак и отправил письмо на почтовый ящик размещенный на mail.ru, появляются крокозябры: C я│п╟п╧я┌п╟: test п·я┌п©я─п╟п╡п╦я┌п╣п╩я▄: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣ Date: Mon, 24 Jun 2013 11:03:16 +0400
п╓.п≤.п·. п╨п╬п╫я┌п╟п╨я┌п╫п╬пЁп╬ п╩п╦я├п╟: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣
п п╬п╫я┌п╟п╨я┌п╫я▀п╧ я┌п╣п╩п╣я└п╬п╫ п╨п╩п╦п╣п╫я┌п╟: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣
п▓я─п╣п╪я▐ п╦ п╢п╟я┌п╟ я┐п╢п╬п╠п╫п╬п╣ п╢п╩я▐ п╥п╡п╬п╫п╨п╟ п╣п╪я┐: я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦п╣ Тема письма отображается верно. Прошу помощи разобраться в данной проблеме.


Ответ

Ну как бы все пользуются для почты http://phpmailer.worxware.com/. Но в вашем случаи есть прям в документации ответ http://php.net/manual/en/function.mail.php : function mail_utf8($to, $subject = '(No subject)', $message = '', $from) { $header = 'MIME-Version: 1.0' . "
" . 'Content-type: text/plain; charset=UTF-8' . "
" . 'From: Yourname <' . $from . ">
"; mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header); }

пятница, 12 октября 2018 г.

Отправка почты средствами PHP через WAMP server

Здравствуйте! Обращаюсь к тем, кто смог настроить на локальном сервере отправку почты средствами PHP. Очень необходима ваша помощь.
Использую протокол IMAP(gmail или yandex) и SMPT-сервер sendmail. При отправке постоянно происходит ошибка «Connect timed out.», много всего прочитал, возможно кто-то смог решить данную проблему или может необходимо использовать другой сервер для отправки почты.
Подключены расширения PHP: open_ssl, sockets;
Модуль Apache: ssl_module.
Система Windows 7, сервер WAMP Apache, php 5.
PHP-код:
$to = em1@gmail.com'; $subject = 'Testing sendmail.exe'; $message = 'Hi, you just received an email using sendmail!'; $headers = 'From: em2@gmail.com' . "
" . 'MIME-Version: 1.0' . "
" . 'Content-type: text/html; charset=utf-8';
mail($to, $subject, $message, $headers);
if(mail($to, $subject, $message, $headers)) echo "Email sent"; else echo "Email sending failed";
Файл sendmail.ini (всё необходимое для изменения) :
smtp_server=smtp.gmail.ru smtp_port=25 smtp_ssl=none default_domain=localhost error_logfile=error.log debug_logfile=debug.log auth_username=my_user_name auth_password=my_user_passw pop3_server= pop3_username= pop3_password= force_sender= em2@gmail.com force_recipient= hostname=gmail.com
Файл php.ini раздел [mail function]
; For Win32 only. ;SMTP = localhost ;smtp_port = 25
; For Win32 only. ;sendmail_from = ; -i sendmail_path = "D:\Server\bin\wamp\sendmail\sendmail.exe -t" ;mail.force_extra_parameters = mail.add_x_header = On
Файл crach.log:
15.07.08 09:10:31 : Connect timed out.
Файл debug.log:
15.07.08 09:10:21 ** --- MESSAGE BEGIN --- 15.07.08 09:10:21 ** To: em1@gmail.com 15.07.08 09:10:21 ** Subject: Testing sendmail.exe 15.07.08 09:10:21 ** X-PHP-Originating-Script: 0:test.php 15.07.08 09:10:21 ** From: em2@gmail.com 15.07.08 09:10:21 ** MIME-Version: 1.0 15.07.08 09:10:21 ** Content-type: text/html; charset=utf-8 15.07.08 09:10:21 ** 15.07.08 09:10:21 ** Hi, you just received an email using sendmail! 15.07.08 09:10:21 ** --- MESSAGE END --- 15.07.08 09:10:21 ** Connecting to smtp.gamil.com:25 15.07.08 09:10:31 ** Disconnected. 15.07.08 09:10:31 ** Disconnected. 15.07.08 09:10:31 ** Disconnected. 15.07.08 09:10:31 ** Disconnected. 15.07.08 09:10:31 ** Connect timed out.
Часть файла crach.txt:
exception class : EIdConnectTimeout

exception message : Connect timed out.


main thread ($2740):

0041fa42 +000e sendmail.exe IdException 112 +1 EIdException.Toss

0044092e +014e sendmail.exe IdIOHandlerStack 279 +38 DoConnectTimeout

00440b4c +01d8 sendmail.exe IdIOHandlerStack 346 +55 TIdIOHandlerStack.ConnectClient

00444a9f +0063 sendmail.exe IdIOHandlerSocket 335 +13 TIdIOHandlerSocket.Open

0044157d +0235 sendmail.exe IdTCPClient 318 +53 TIdTCPClientCustom.Connect

00445cc8 +00a4 sendmail.exe IdExplicitTLSClientServerBase 257 +23 TIdExplicitTLSClient.Connect

0045ab7b +0017 sendmail.exe IdSMTP 373 +2 TIdSMTP.Connect

004b5f14 +1060 sendmail.exe sendmail 808 +326 initialization 76533378 +0010 kernel32.dll

BaseThreadInitThunk


thread $2570:

774b01a2 +0e ntdll.dll NtWaitForMultipleObjects

76533378 +10 kernel32.dll BaseThreadInitThunk


Ответ

Вот работающий, только что проверял.
[sendmail] smtp_server=smtp.googlemail.com smtp_port=465 smtp_ssl=auto error_logfile=log/error.log debug_logfile=log/debug.log auth_username=*************@gmail.com auth_password=************* pop3_server= pop3_username= pop3_password= force_sender=*************@gmail.com force_recipient= hostname=*************@gmail.com