Отправка почты через сервис mailgun.com (с прикреплением файлов)

Обработка показывает, как можно слать письма с вложениями через API Mailgun.com.

На сайте есть обработка, которая также позволяет слать письма, но без вложений.

Обработка позволяет отсылать письма с вложениями через API Mailgun.com. Тестировалась на пустой базе на платформе 1С 8.3.

Обработка сделана через внешнюю .dll WinHttp и использует при передаче составной тип содержимого в Http запросе Content-type: multipart/form-data. (подробнее, как работает этот механизм, можно прочитать в википедии https://ru.wikipedia.org/wiki/Multipart/form-data)

Предупрежу вопросы, через 1С-совский метод HTTPсоединение сделать не удалось. По каким-то причинам не хочет воспринимать тип содержимого multipart/form-data.

Надеюсь, кому-нибудь поможет.

5 Comments

  1. ltfriend

    Отправка письма средствами 1С без использования дополнительных компонент (код проверен на работоспособность):

    Функция ОтправитьПисьмоЧерезMailgun()
    
    Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), «-«, «»);
    
    ФайлДанных = Новый Файл(ИмяФайлаДанных);
    
    ТелоСообщения = «—» + Boundary + »
    |Content-Disposition: form-data; name=»»from»»» + »
    |
    |» + Отправитель + »
    |—» + Boundary + »
    |Content-Disposition: form-data; name=»»to»»» + »
    |
    |» + ПолучательАдрес + »
    |—» + Boundary + »
    |Content-Disposition: form-data; name=»»subject»»» + »
    |
    |» + ТемаПисьма + »
    |—» + Boundary + »
    |Content-Disposition: form-data; name=»»text»»» + »
    |
    |» + ТекстПисьма + »
    |—» + Boundary + »
    |Content-Disposition: form-data; name=»»attachment»»; filename=»»» + ФайлДанных.Имя + «»»
    |Content-Type: application/» + Сред(ФайлДанных.Расширение, 2) + »
    |Content-Transfer-Encoding: base64
    |
    |» + Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных)) + »
    |—» + Boundary + «—«;
    
    // Обойдёмся без временных файлов!
    ПотокДанных = Новый ПотокВПамяти;
    
    ЗаписьДанных = Новый ЗаписьДанных(ПотокДанных);
    ЗаписьДанных.ЗаписатьСтроку(ТелоСообщения);
    ЗаписьДанных.Закрыть();
    
    ДанныеДляОтправки = ПотокДанных.ЗакрытьИПолучитьДвоичныеДанные();
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить(«Content-Type», «multipart/form-data; boundary=»+Boundary);
    Заголовки.Вставить(«Content-Length», XMLСтрока(ДанныеДляОтправки.Размер()));
    
    Запрос = Новый HTTPЗапрос(«/v3/» + Домен + «/messages», Заголовки);
    Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеДляОтправки);
    
    Соединение = Новый HTTPСоединение(«api.mailgun.net»,, «api», Пароль,,, Новый ЗащищенноеСоединениеOpenSSL);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    
    Сообщить(«Ответ сервера: (» + Ответ.КодСостояния + «) » + Ответ.ПолучитьТелоКакСтроку());
    
    КонецФункции
    

    Показать

    Reply
  2. Xephone

    Спасибо за механизм записи данных в поток, очень полезно, буду теперь знать как делать 🙂

    Reply
  3. Forest83

    (1) Павел, писали письмо в службу MailGun по двойной подписи адресатов и т.п.? У меня сейчас ограничение 100 писем в час. Как вы этот момент обошли?

    Если можно, немного расскажите как используете MailGun. Думаю в тему будет полезно.

    Reply
  4. Xephone

    Кстати, XLS файлы в поток не пишутся, поэтому их все-равно надо в промежуточные файлы записывать.

    Reply
  5. Xephone

    (3) ограничение можно обойти если купить подписку

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *