GMail API

fixxxer

К.О.
Партнер клуба
@scorpion-ds, exim-ом можно сделать вообще всё, но его надо осилить. Фактически это такой MTA-фреймворк с полудекларативным программированием в конфиге.

Кстати, а зачем отправлять именно через гугловый SMTP? Можно и со своего SMTP напрямую. Настраиваешь SPF/DKIM/DMARC/обратки, получаешь 10/10 по mail-tester.com, и все будет отлично, если не откровенный спам рассылаете.
 

scorpion-ds

Новичок
@fixxxer, я такое предлагал, но тогда теряется суть "личной рассылки", так как в почтовом клиенте будет указано, что письмо отправлено "через Название", по меньшей мере именно так получается с amazon ses, хотят что бы письмо выглядело полностью отправленное через gmail.
 

scorpion-ds

Новичок
Тебя никто не заставляет добавлять такие же заголовки, какие добавляет ses.
Понятно, я не вдавался в вопрос от куда берется подпись. Лично я за свой SMTP или ses-подобное, но изредка письма все равно идут в СПАМ, несмотря ни как какие "SPF/DKIM/DMARC" (все делали на ses).
 

fixxxer

К.О.
Партнер клуба
Если людям постоянно слать маркетинговое дерьмо, которое только раздражает, логично, что они жмут кнопку "Это спам" или мгновенно удаляют письмо (что gmail приравнивает к спаму).

Отправка через gmail-овские smtp в этом случае тоже не поможет, разве что может несколько отсрочить неминуемое.

В этом случае лучше задуматься над тем, чтобы составлять нормальные тексты, которые людям интересно читать.
 

scorpion-ds

Новичок
В этом случае лучше задуматься над тем, чтобы составлять нормальные тексты, которые людям интересно читать.
В общем наш сервис так и планируется, что бы пользователи системы отправляли персонализированные письма, когда менеджер получает уведомление, что потенциальный клиент открыл письмо (вложения тоже могут отслеживаться), то он перезванивает клиенту уже по телефону, то есть планируется отправка бизнес предложений, а не рекламы. Как будут пользоваться конечные пользователи приложением, это уже другой вопрос.

Весь этот вопрос с CC, BCC не для более массовой рассылки, а для полной имитации работы обычной почты.
 

fixxxer

К.О.
Партнер клуба
Не стоит только забывать, что никакой гарантии отслеживания нет. Я вот вообще кнопку load remote images почти никогда не нажимаю, и многие так же делают.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@scorpion-ds, тебе говорят одно и то же 10 раз, а ты тупо продолжаешь повторять тот же вопроос.
Да ответили уже, перечитай.

Каждое письмо отправляется отдельно.
 
Последнее редактирование:

scorpion-ds

Новичок
Не стоит только забывать, что никакой гарантии отслеживания нет. Я вот вообще кнопку load remote images почти никогда не нажимаю, и многие так же делают.
Вложения тоже будут отслеживаться, с картинкой я упростил вопрос.

…не имеет никакого отношения к оригинальной проблеме.
В этом и была проблема, я был уверен, что заголовки письма TO, CC, BCC обрабатываются smtp-сервером, так как это не так, то я написал свой клиент для работы с smtp, который через fsockopen открывает соединение с smtp.gmail.com и отправляет письма только конкретным получателям, с разным текстом, но одними и теми же TO, CC, BCC, а в отправленные вставляю копию письма, уже через API.
 

AnrDaemon

Продвинутый новичок
я был уверен, что заголовки письма TO, CC, BCC обрабатываются smtp-сервером
Они им и обрабатываются.
с разным текстом
А вот ТЕКСТ сообщения SMTP сервером никак не обрабатывается. Т.е. вообще. Для SMTP сервера тело сообщения - это непрозрачный контейнер.
 

fixxxer

К.О.
Партнер клуба
@scorpion-ds, советую ознакомиться с протоколом SMTP. Базово, во всякие auth-ы вникать не надо. До того уровня, когда ты сможешь отправить plain text-письмо telnet-ом на 25-й порт. Это совсем несложно, вот, смотри:

Код:
$ nc localhost 25
220 server-domain.com ESMTP Exim 4.82 Ubuntu Thu, 20 Apr 2017 14:23:54 +0000
EHLO server-domain.com
250-server-domain.com Hello localhost [127.0.0.1]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250 HELP
MAIL FROM: [email protected]
250 OK
RCPT TO: [email protected]
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
X-My-Custom-Header: This is the message. It is sent as-is, SMTP server won't process anything. I can even use From: and To: that do not match MAIL FROM and RCPT TO,
X-My-Custom-Header-2: but that'd obviously go to the Spam folder.
From: [email protected]
To: "Myself" <[email protected]>
Cc: "That's just a header, nothing will be CCed by the server" <[email protected]>
Subject: Test message

test
.
250 OK id=1d1D0F-0000ob-0Y
QUIT

Они им и обрабатываются.
Обрабатывается таки то, что до DATA, это разное
 
Последнее редактирование:

scorpion-ds

Новичок
@fixxxer, теперь я это понял, письма уходят каждому получателю со своим текстом, примерно как в примере.

Сейчас осталась проблема, что на тело письма сервер сообщает "354 Go ahead", тем не менее письмо уходит.
 

fixxxer

К.О.
Партнер клуба
на тело письма сервер сообщает "354 Go ahead"
Это ответ на DATA.

Если ты работаешь с SMTP ручками (ты там про fsockopen писал выше), надо вычитывать после каждой команды ответ целиком, иногда он не сразу отдается, надо подождать, ну проще всего работать с SMTP синхронно.
Ответом является строка с циферкой, после которой нету -. Если циферка с -, значит, продолжение в следующией строке. Вот посмотри ответ на EHLO у меня выше.

Команда - это обычно одна строка, в случае с DATA команда - это сообщение, заканчивается строкой с точкой. Сообщение надо отправлять только после получения 354. Ну как и прочие команды - вычитываешь ответ, и продолжаешь работу только если он ожидаемый (ведь сервер может вернуть и код ошибки). Короче, это конечным автоматом программируется.

А вообще возьми SwiftMailer и не мучайся.

тем не менее письмо уходит
От реализации сервера зависит. Другая реализация бы послала лесом запросто за нарушение протокола.
 
Последнее редактирование:

scorpion-ds

Новичок
Нетлог можешь покзать?
PHPMailer я использую только для создания тела письма, отправлю своим "классом", вывод такой:
Код:
Array
(
    [0] => C: EHLO Docsify
    [1] => S: 250-smtp.gmail.com at your service, [2a01:4f8:c17:68d0::2]
    [2] => S: 250-SIZE 35882577
    [3] => S: 250-8BITMIME
    [4] => S: 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
    [5] => S: 250-ENHANCEDSTATUSCODES
    [6] => S: 250-PIPELINING
    [7] => S: 250-CHUNKING
    [8] => S: 250 SMTPUTF8
    [9] => C: AUTH XOAUTH2 ***
    [10] => S: 235 2.7.0 Accepted
    [11] => C: MAIL FROM:<[email protected]>
    [12] => S: 250 2.1.0 OK 190sm24002651wmk.17 - gsmtp
    [13] => C: RCPT TO:<[email protected]>
    [14] => S: 250 2.1.5 OK 190sm24002651wmk.17 - gsmtp
    [15] => C: DATA [Date: Thu, 20 Apr 2017 18:02:17 +0300
From: =?UTF-8?B?0JTQvNC40YLRgNC40Lkg0KjRg9Cx0LA=?= <[email protected]>
Reply-To: =?UTF-8?B?0JTQvNC40YLRgNC40Lkg0KjRg9Cx0LA=?= <[email protected]>
Message-ID: <[email protected]>
X-Mailer: Docsify
X-Docsify-Message-Id: 58649df1-25da-11e7-beee-5254a201a754
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
To: [email protected]
Subject: title 3

<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <p>message 2</p>
    <img src="https://app.smarty-mail.com.ua/app_dev.php/message/open/58649df1-25da-11e7-beee-5254a201a754.gif" width="1px" height="1px" style="height: 1px; width: 1px;">
</body>
</html>[[email protected]]
]
    [16] => S: 354  Go ahead 190sm24002651wmk.17 - gsmtp
    [17] => S: Error: 354 [354  Go ahead 190sm24002651wmk.17 - gsmtp]
    [18] => C: QUIT
    [19] => S: 250 2.0.0 OK 1492700538 190sm24002651wmk.17 - gsmtp
)
 

scorpion-ds

Новичок
Если ты работаешь с SMTP ручками (ты там про fsockopen писал выше), надо вычитывать после каждой команды ответ целиком, иногда он не сразу отдается, надо подождать, ну проще всего работать с SMTP синхронно.
Ответом является строка с циферкой, после которой нету -. Если циферка с -, значит, продолжение в следующией строке. Вот посмотри ответ на EHLO у меня выше.
С этим я разобрался, хотя провозился долго, особенно с задержкой ответа от сервера и еще после неудачной авторизации он слал два ответа без "-" (первый 3хх, второй 5xx). В общем проблема была, что я сначала выгребал не все ответы от прошлых команд и они начинал выполнять новые, в итоге в ответе каша.

Команда - это обычно одна строка, в случае с DATA команда - это сообщение, заканчивается строкой с точкой. Сообщение надо отправлять только после получения 354. Ну как и прочие команды - вычитываешь ответ, и продолжаешь работу только если он ожидаемый (ведь сервер может вернуть и код ошибки). Короче, это конечным автоматом программируется.
Назначение 354 я понял, но если я выполняю DATA и жду ответ "354", то скрипт просто зависает до таймаута, если же отправляю сразу тело письма, то письмо отправляется, а следом приходит 354, итог снова каша.

Вот как раз то, о чем я и говорю.
Я немного ввел в заблуждение, строки с "[ ]", это не сетевой вывод (для себя), вывести из сети DATA у меня не получается, из-за зависания.

А вообще возьми SwiftMailer и не мучайся.
Так я бы не против, но тогда обработкой to, cc, bcc займется SwiftMailer, а меня это не устраивает.
 
Сверху