HelpF.pro

Отправка почты через Mail.ru с использованием технологии шифрования SSL

Часто клиенты просят сделать автоматическую отправку счетов или отчетов на электронную почту, ниже приведены примеры кода для разных версий 1С:

Код 1C v 8.3
 
//Код для обычного приложения, для управляемого приложения отправка почты так же, только с файлами и предупреждение нужно изменить код
Функция ПолучитьПрофильПочты()
//Создаем профиль либо считываем из справочника 
Профиль = Новый ИнтернетПочтовыйПрофиль; 
Профиль.АдресСервераSMTP = "smtp.mail.ru";//Отправитель.АдресСервераSMTP; //"smtp.mail.ru"; 
Профиль.АдресСервераPOP3 = "pop.mail.ru"; //Отправитель.АдресСервераPOP3; //"pop.mail.ru"; 
Профиль.ПортPOP3 = 995;//Отправитель.ПортPOP3; //110;
Профиль.ПортSMTP = 465;//Отправитель.ПортSMTP; //587; 
Профиль.Пользователь = "s_v@inbox.ru";// Отправитель.Email; //"test@mail.ru"; 
Профиль.Пароль = "8mFTnDjC4KftTzh"; //Отправитель.Пароль; //"123456789"; 
Профиль.ПользовательSMTP =  "s_v@inbox.ru";//Отправитель.Email; //"test@mail.ru"; 
Профиль.ПарольSMTP = "8mFTnDjC4KftTzh";//Отправитель.Пароль; //"123456789"; 
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ИспользоватьSSLPOP3 = Истина;
Профиль.ИспользоватьSSLSMTP = Истина;  
//Создаем письмо 
Возврат Профиль;
КонецФункции 


Процедура ОсновныеДействияФормыСчетОтправитьНаПочту(Кнопка)
Если ЗначениеЗаполнено(Ответственный.ПочтаДляОтправкиСчета) Тогда
Почта = Новый ИнтернетПочта; 
Письмо = Новый ИнтернетПочтовоеСообщение; 
Текст = Письмо.Тексты.Добавить("В приложении счет"); 
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Письмо.Тема = Строка(Ссылка); 
Письмо.Отправитель = "s_vmeste@inbox.ru"; 
Письмо.ИмяОтправителя = "1С";
Письмо.Получатели.Добавить(Ответственный.ПочтаДляОтправкиСчета);

врфайл=ПолучитьИмяВременногоФайла("pdf");
текТабдок=СчетФаксимилеТовары(); //Функция возвращает табличный документ печать счета
текТабдок.Записать(врфайл,ТипФайлаТабличногоДокумента.PDF);

Письмо.Вложения.Добавить(врфайл);
//добавляем вложение если нужно, например "C:\Приложение.doc" 
//Вложений можно добавлять сколько требуется. 
//Отправляем письмо
Попытка 
Почта.Подключиться(ПолучитьПрофильПочты()); Почта.Послать(Письмо); Предупреждение("Письмо отправлено",3);
Исключение 
Сообщить(ОписаниеОшибки());
КонецПопытки;
//Закрываем письмо
Почта.Отключиться(); 
//Закрываем файл вложения
Письмо.Вложения.Очистить();
Иначе
Предупреждение("В настройках ответственного не указана почта для отправки счета");
КонецЕсли;
КонецПроцедуры

С версиями 8.2 сложнее, так как все почтовые сервисы перешли на SSL, а медоты:

Код 1C v 8.3
 Профиль.ИспользоватьSSLPOP3 = Истина;
Профиль.ИспользоватьSSLSMTP = Истина; 

появились только в 8.3.1 ), остается использовать stunnel или CDO:

Код 1C v 8.2 УП
 //Отправка через CDO, Адрессаты через ";"
Функция ПослатьПоПочте(Знач Адрессаты, ТемаСообщения = "",ТекстСообщения = "" ,СписокВложений = "")Экспорт

    Оправитель         = "s_v@inbox.ru";
    Пароль             = "8mFTnDjC4KftTzh";

    loConfig         = Новый COMОбъект("CDO.Configuration");
    loCdoMessage     = Новый COMОбъект("CDO.Message");
    loCdoMessage.Configuration = loConfig;
    loCdoMessage.From    = Строка("1С <"+Оправитель+">");  //loCdoMessage.From    = "Тест 1C"""" <xxxxxxx@yandex.ru>";
    loCdoMessage.To      = Адрессаты; //loCdoMessage.To      = "xxxxxxx@gmail.ru>";
    loCdoMessage.Subject = ?(ТемаСообщения="","1С",ТемаСообщения);
    loCdoMessage.TextBody = "1C";
     HTMLBody = "<html>
    |<head>
    |<meta content=""text/html; charset=Windows-1251"" http-equiv=""content-type"">
    |<title> Тестовое сообщение </title>
    |</head>
    |<body>
    |<h4>" + ТекстСообщения + "</h4>
    |<p></p>
    |</body>
    |</html>";
    //loCdoMessage.BodyPart.Charset = "windows-1251";
    loCdoMessage.HTMLBody = HTMLBody;

    Если ТипЗнч(СписокВложений) = Тип("Строка") И Не СписокВложений = "" Тогда
        Попытка
            loCdoMessage.AddAttachment(СписокВложений);
        Исключение
        КонецПопытки;
    ИначеЕсли ТипЗнч(СписокВложений) = Тип("СписокЗначений") Тогда
        Для каждого ПутьКВложению Из СписокВложений Цикл
            Попытка
                loCdoMessage.AddAttachment(ПутьКВложению.Значение);
            Исключение
            КонецПопытки;
        КонецЦикла;
    КонецЕсли;
   loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").            Value = 2;
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").           Value = "smtp.mail.ru";
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").       Value = "465";
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").     Value = 1;
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").         Value = Оправитель;
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").         Value = Пароль;
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").           Value = 1;
    loConfig.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 60;

    loConfig.Fields.Update();   
    Попытка
        loCdoMessage.Send();
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат Ложь;
    КонецПопытки;

КонецФункции

Процедура ОсновныеДействияФормыСчетТовары(Кнопка)
Если ЗначениеЗаполнено(Менеджер.ПочтаДляОтправкиСчета) Тогда

врфайл=ПолучитьИмяВременногоФайла("xls");
текТабдок=СчетФаксимилеТовары();
текТабдок.Записать(врфайл,ТипФайлаТабличногоДокумента.XLS);
ПослатьПоПочте(Менеджер.ПочтаДляОтправкиСчета,Строка(Ссылка),"Счет в приложении",врфайл);

Предупреждение("Письмо отправлено",3);
Иначе
Предупреждение("В настройках ответственного не указана почта для отправки счета");
КонецЕсли;
КонецПроцедуры

Через stunnel в 1С код, менять не нужно, только установить программу и изменить настройки подключения к почтовому ящику

Скачиваем stunnel c официального сайта (stunnel.org)  и запускаем инсталятор, жмем yes при установке спросит страну и ваши данные, это нужно для создания сертификата на вашем компьютере.

После запуска в трее появится его иконка, правой клавишей и редактировать edit configuration

В блокноте откроется файл настроек, там будет пример для gmail дополняем или заменяем его следующим:

Код Batch File (DOS, CMD, BAT)
 [gmail-pop3]
client = yes
accept = 127.0.0.1:10110
connect = pop.gmail.com:995
[gmail-imap]
client = yes
accept = 127.0.0.1:10143
connect = imap.gmail.com:993
[gmail-smtp]
client = yes
accept = 127.0.0.1:10025
connect = smtp.gmail.com:465
[yandex-pop3]
client = yes
accept = 127.0.0.1:20110
connect = pop.yandex.ru:995
[yandex-imap]
client = yes
accept = 127.0.0.1:20143
connect = imap.yandex.ru:993
[yandex-smtp]
client = yes
accept = 127.0.0.1:20025
connect = smtp.yandex.ru:465
[mail-pop3]
client = yes
accept = 127.0.0.1:30110
connect = pop.mail.ru:995
[mail-imap]
client = yes
accept = 127.0.0.1:30143
connect = imap.mail.ru:993
[mail-smtp]
client = yes
accept = 127.0.0.1:30025
connect = smtp.mail.ru:465

Сохраняем файл и делаем Reload configuration

В настройка 1С меняем порты для работы

gmail

pop3 10110

imap 10143

smtp 10025

yandex

pop3 20110

imap 20143

smtp 20025

mail

pop3 30110

imap 30143

smtp 30025

Если в коде прописано, то:

Код 1C v 8.х
 Функция ПолучитьПрофильПочты()
//Создаем профиль либо считываем из справочника 
Профиль = Новый ИнтернетПочтовыйПрофиль; 
Профиль.АдресСервераSMTP = "localhost";//"smtp.mail.ru";//Отправитель.АдресСервераSMTP; //"smtp.mail.ru"; 
Профиль.АдресСервераPOP3 = "localhost";//"pop.mail.ru"; //Отправитель.АдресСервераPOP3; //"pop.mail.ru"; 
Профиль.ПортPOP3 = 30110;//Отправитель.ПортPOP3; //110;  995
Профиль.ПортSMTP = 30025;//Отправитель.ПортSMTP; //587; 465
Профиль.Пользователь = "s_v@inbox.ru";// Отправитель.Email; //"test@mail.ru"; 
Профиль.Пароль = "8mFTnDjC4KftTzh"; //Отправитель.Пароль; //"123456789"; 
Профиль.ПользовательSMTP =  "s_v@inbox.ru";//Отправитель.Email; //"test@mail.ru"; 
Профиль.ПарольSMTP = "8mFTnDjC4KftTzh";//Отправитель.Пароль; //"123456789"; 
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
//Профиль.ИспользоватьSSLPOP3 = Истина;
//Профиль.ИспользоватьSSLSMTP = Истина;  
//Создаем письмо 
Возврат Профиль;
КонецФункции

Все, можно отправлять и проверять работу через консоль Show log window в меню

P.S. Почтовый ящик в примерах не рабочий, как пример )


Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1892.html