Что нового

Текст сообщения некорректен

tar

Новичок
Сообщения
58
Репутация
0
Здравствуйте. В сообщении текст заменяется знаками вопроса. Как исправить?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Удалите пароль из кода, если вам дорога почта
 

eysh

Новичок
Сообщения
16
Репутация
1
:smile:


Добавлено:
Сообщение автоматически объединено:

tar сказал(а):
Здравствуйте. В сообщении текст заменяется знаками вопроса. Как исправить?
Код:
#AutoIt3Wrapper_Run_AU3Check= N
#include <File.au3>
$SmtpServer = 'smtp.yandex.ru'
$FromAddress = '[email protected]'
$Username = '[email protected]'
$Password = 'ftuiutwfu19'
;$ToAddress = 'адресат@inbox.ru'
$Subject = 'Гарантийное обслуживание ХОК.'
$Body = 'Здравствуйте. Вы не подали заявку на технический осмотр оборудования. Напоминаем, если мы не получим заявку до 31.07.18, ремонт по гарантии станет не возможен.'
$hFile = FileOpen("roma.txt")
While 1
    $ToAddress = FileReadLine($hFile)
    If @error Then ExitLoop
_INetSmtpMailCom($SmtpServer, '', $FromAddress, $ToAddress, $Subject, $Body, '', '', '', $Username, $Password)
Sleep(60000)
WEnd
FileClose($hFile)
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 1)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($s_Body, "<") And StringInStr($s_Body, ">") Then
        $objEmail.HTMLBody = $s_Body
    Else
        $objEmail.Textbody = $s_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                $i_Error_desciption = $i_Error_desciption & @LF & 'File not found to attach: ' & $S_Files2Attach[$x]
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    $objEmail.Configuration.Fields.Update
    $objEmail.Send
    If @error Then
        SetError(2)
    EndIf
EndFunc   ;==>_INetSmtpMailCom

Попробуй поиграться с кодировкой..... ANSI, UTF-8
 

Вложения

  • .PNG
    .PNG
    3.7 КБ · Просмотры: 15
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
Afonichev
Спасибо, но, первые символы из адреса были удалены перед публикацией.

eysh [?]
Попробуй поиграться с кодировкой..... ANSI, UTF-8
Сохранял текст в notepad, в 2 файла. Один в ANSI, другой в UTF-8. По очереди копировал текст в скрипт. В обоих случаях приходит сообщение с вопросительными знаками вместо кириллицы, латинские символы "P.S." отобразились верно.
Подскажите, как решить.
 

eysh

Новичок
Сообщения
16
Репутация
1
Если так, поместить текст в файл, потом прочесть и отправить?
Код:
$s = @ScriptDir & "\mytext.txt"
With ObjCreate("ADODB.Stream")
	.Type = 2
	.Mode = 3
	.Charset = "windows-1251"
	.Open
	.LoadFromFile($s)
	.Position = 0
	$s = .ReadText
	.Close
EndWith

MsgBox(0,0,$s)
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
eysh [?]
Если так, поместить текст в файл, потом прочесть и отправить?
В MsgBox выводит правильно сообщение из файла с кодировкой ANSI. На почту приходят знаки вопросов вместо кириллицы, латиница приходит верно. Какие возможны варианты?
 

eysh

Новичок
Сообщения
16
Репутация
1
вот что у меня приходит, все норм да же если добавляю это все норм....

Код:
$objEmail.BodyPart.Charset = "utf-8" ; utf-8, windows-1251, koi8-r, koi8-u, iso-8859-5
$objEmail.TextBodyPart.Charset = "utf-8"
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    17.9 КБ · Просмотры: 8
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
eysh [?]
вот что у меня приходит, все норм да же если добавляю это все норм..
Может чего не правильно сделал?
Код:
$Subject = 'test 1'

$s = @ScriptDir & "\textoANSI.txt"
With ObjCreate("ADODB.Stream")
    .Type = 2
    .Mode = 3
    .Charset = "windows-1251"
    .Open
    .LoadFromFile($s)
    .Position = 0
    $s = .ReadText
    .Close
EndWith
$Body = $s

$hFile = FileOpen("roma.txt")
While 1
    $ToAddress = FileReadLine($hFile)
    If @error Then ExitLoop
_INetSmtpMailCom($SmtpServer, '', $FromAddress, $ToAddress, $Subject, $Body, '', '', '', $Username, $Password)
Sleep(60000)
WEnd

Покажите, полностью, скрипт который отправил правильный текст.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
В AutoIt 3.3.14.2 код даже не работает

Код:
$objEmail.Send
$objEmail^ ERROR
->20:44:43 AutoIt3.exe ended.rc:1
+>20:44:43 AutoIt3Wrapper Finished.
>Exit code: 1    Time: 1.627
 

eysh

Новичок
Сообщения
16
Репутация
1
у меня AutoIt 3.3.14.5, отправлял так все пришло без иероглифов

Код:
#AutoIt3Wrapper_Run_AU3Check= N
#include <File.au3>
$SmtpServer = 'smtp.yandex.ru'
$FromAddress = '[email protected]'
$Username = '[email protected]'
$Password = 'ftuiutwfu19'
;$ToAddress = 'адресат@inbox.ru'
$Subject = 'Гарантийное обслуживание ХОК.'
$Body = 'Здравствуйте. Вы не подали заявку на технический осмотр оборудования. Напоминаем, если мы не получим заявку до 31.07.18, ремонт по гарантии станет не возможен.'

_INetSmtpMailCom($SmtpServer, '', $FromAddress, '[email protected]', $Subject, $Body, '', '', '', $Username, $Password)

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 1)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress

    $objEmail.Subject = $s_Subject
    If StringInStr($s_Body, "<") And StringInStr($s_Body, ">") Then
        $objEmail.HTMLBody = $s_Body

    Else
		$objEmail.BodyPart.Charset = "utf-8" ; utf-8, windows-1251, koi8-r, koi8-u, iso-8859-5
        $objEmail.TextBodyPart.Charset = "utf-8"
        $objEmail.Textbody = $s_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
        Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
        For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
            If FileExists($S_Files2Attach[$x]) Then
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                $i_Error_desciption = $i_Error_desciption & @LF & 'File not found to attach: ' & $S_Files2Attach[$x]
                SetError(1)
                Return 0
            EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $ssl Then
        $objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    $objEmail.Configuration.Fields.Update
    $objEmail.Send
    If @error Then
        SetError(2)
    EndIf
EndFunc   ;==>_INetSmtpMailCom
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Если не нужно прикреплять файлы и отправлять HTML письма, то набросал это.

Код:
$sFromName    = 'Отправитель'
$sFromAddress = '[email protected]'
$sSubject     = 'Гарантийное обслуживание ХОК.'
$sBody        = 'Здравствуйте. Вы не подали заявку на технический осмотр оборудования. Напоминаем, если мы не получим заявку до 31.07.18, ремонт по гарантии станет не возможен.'

$sToAddress   = '[email protected]'

$sSmtp        = 'smtp.yandex.ru'
$iPort        = 25
$bSsl         = True
$sUsername    = 'username'
$sPassword    = 'password'


$hDll = DllOpen('mailer.dll')
If $hDll Then
	$hMail = mail_create($hDll, $sFromName, $sFromAddress, $sSubject, $sBody)
	If ($hMail <> 0) Then
		mail_add_recipient($hDll, $hMail, $sToAddress)
		mail_send($hDll, $hMail, $sSmtp, $iPort, $bSsl, $sUsername, $sPassword)
		mail_close($hDll, $hMail)
	EndIf
	DllClose($hDll)
EndIf

Func mail_create($hDll, $sFromName, $sFromAddress, $sSubject, $sBody)
	Local $aRet = DllCall($hDll, 'handle', 'mail_create', 'wstr', $sFromName, 'wstr', $sFromAddress, 'wstr', $sSubject, 'wstr', $sBody)
	If (@error Or (Not IsArray($aRet))) Then
		Return SetError(0, 0, 1)
	EndIf
	Return $aRet[0]
EndFunc

Func mail_close($hDll, $hMail)
	Local $aRet = DllCall($hDll, 'bool', 'mail_close', 'handle', $hMail)
	If (@error Or (Not IsArray($aRet))) Then
		Return SetError(0, 0, 1)
	EndIf
	Return $aRet[0]
EndFunc

Func mail_add_recipient($hDll, $hMail, $sToAddress)
	Local $aRet = DllCall($hDll, 'bool', 'mail_add_recipient', 'handle', $hMail, 'wstr', $sToAddress)
	If (@error Or (Not IsArray($aRet))) Then
		Return SetError(0, 0, 1)
	EndIf
	Return $aRet[0]
EndFunc

Func mail_send($hDll, $hMail, $sSmtp, $iPort, $bSsl, $sUsername, $sPassword)
	Local $aRet = DllCall($hDll, 'bool', 'mail_send', 'handle', $hMail, 'wstr', $sSmtp, 'int', $iPort, 'bool', $bSsl, 'wstr', $sUsername, 'wstr', $sPassword)
	If (@error Or (Not IsArray($aRet))) Then
		Return SetError(0, 0, 1)
	EndIf
	Return $aRet[0]
EndFunc

 

Вложения

  • mailer.zip
    102.5 КБ · Просмотры: 4
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
Afonichev [?]
Если не нужно прикреплять файлы и отправлять HTML письма, то набросал это.
Спасибо, порядок. В таком варианте, как можно отправить активную ссылку?
Примерно так
Код:
Задайте вопрос специалисту http://restprom.ru/about_us/vopros-otvet/
 

eysh

Новичок
Сообщения
16
Репутация
1
tar сказал(а):
Afonichev [?]
Если не нужно прикреплять файлы и отправлять HTML письма, то набросал это.
Спасибо, порядок. В таком варианте, как можно отправить активную ссылку?
Примерно так
Код:
Задайте вопрос специалисту http://restprom.ru/about_us/vopros-otvet/

Код:
<a href="http://restprom.ru/about_us/vopros-otvet/">Задайте вопрос специалисту</a>
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Добавил отправку HTML писем.

Пример:
Код:
$sFromName    = 'Отправитель'
$sFromAddress = '[email protected]'
$sSubject     = 'Гарантийное обслуживание ХОК.'
$sBody        = 'Здравствуйте. Вы не подали заявку на технический осмотр оборудования. Напоминаем, если мы не получим заявку до 31.07.18, ремонт по гарантии станет не возможен.</br></br><a href="http://restprom.ru/about_us/vopros-otvet/">Задайте вопрос специалисту</a>'
$bHtml        = True

$sToAddress   = '[email protected]'

$sSmtp        = 'smtp.yandex.ru'
$iPort        = 25
$bSsl         = True
$sUsername    = 'username'
$sPassword    = 'password'

$hDll = DllOpen('mailer.dll')
If $hDll Then
    $hMail = mail_create($hDll, $sFromName, $sFromAddress, $sSubject, $sBody, $bHtml)
    If ($hMail <> 0) Then
        If mail_add_recipient($hDll, $hMail, $sToAddress) Then
			$bResult = mail_send($hDll, $hMail, $sSmtp, $iPort, $bSsl, $sUsername, $sPassword)
			ConsoleWrite($bResult & @CRLF)
		EndIf
        mail_close($hDll, $hMail)
    EndIf
    DllClose($hDll)
EndIf

Func mail_create($hDll, $sFromName, $sFromAddress, $sSubject, $sBody, $bHtml)
    Local $aRet = DllCall($hDll, 'handle', 'mail_create', 'wstr', $sFromName, 'wstr', $sFromAddress, 'wstr', $sSubject, 'wstr', $sBody, 'bool', $bHtml)
    If (@error Or (Not IsArray($aRet))) Then
        Return SetError(0, 0, 1)
    EndIf
    Return $aRet[0]
EndFunc

Func mail_close($hDll, $hMail)
    Local $aRet = DllCall($hDll, 'bool', 'mail_close', 'handle', $hMail)
    If (@error Or (Not IsArray($aRet))) Then
        Return SetError(0, 0, 1)
    EndIf
    Return $aRet[0]
EndFunc

Func mail_add_recipient($hDll, $hMail, $sToAddress)
    Local $aRet = DllCall($hDll, 'bool', 'mail_add_recipient', 'handle', $hMail, 'wstr', $sToAddress)
    If (@error Or (Not IsArray($aRet))) Then
        Return SetError(0, 0, 1)
    EndIf
    Return $aRet[0]
EndFunc

Func mail_send($hDll, $hMail, $sSmtp, $iPort, $bSsl, $sUsername, $sPassword)
    Local $aRet = DllCall($hDll, 'bool', 'mail_send', 'handle', $hMail, 'wstr', $sSmtp, 'int', $iPort, 'bool', $bSsl, 'wstr', $sUsername, 'wstr', $sPassword)
    If (@error Or (Not IsArray($aRet))) Then
        Return SetError(0, 0, 1)
    EndIf
    Return $aRet[0]
EndFunc
 

Вложения

  • mailer.zip
    90.2 КБ · Просмотры: 3
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
Afonichev [?]
Добавил отправку HTML писем.
Спасибо большое. Получил он уведомление или нет? Заказчики довольно часто ошибаются в написании собственных е-адресов. Когда отправляю вручную, то видно, что адрес не существует и такому приходится звонить. Нет ли возможности узнать, а ещё лучше, перед отправкой, проверить существование адреса, чтобы почтовиков не нервировать. Несуществующий адрес сохранить в файл.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Посмотрите команды SMTP протокола, если адрес существует, то вернёт 250, если нет, то 550.
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
Afonichev
Спасибо. Нашел реализацию на РНР,
Код:
$re='/.*@(.*)/';
preg_match($re, $email, $match);
$domain=$match[1];

$mx_records=dns_get_record($domain, DNS_MX);

	  $port = 25; //Порт работы сервера
	  if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
	    //AF_INET - семейство протоколов
	    //SOCK_STREAM - тип сокета
	    //SOL_TCP - протокол
	    echo "\nSocket creating error\n";
	  }
	  $result = socket_connect($socket, $domain, $port);
	  if ($result === false) {
	    echo "\nError connecting to socket\n";
	  } else {
	    echo "\nSocket connected\n";
	  }

В идеале диалог с сервером должно происходить так:
Код:
> HELO domain.com
< 250 OK
> MAIL FROM: <[email protected]>
< 250 OK
> RCPT TO: <email@dlya_proverki.com>
< Ответ с резульатом проверки
</email@dlya_proverki.com></[email protected]>
Отправка сообщения сервису для проведения диалога делается через функцию:

Код:
$msg="HELO domain.com";
socket_write($socket, $msg, strlen($msg));

Получение, через функцию:

Код:
$out = socket_read($socket, 1024);
echo $out;


Обыскал сеть, на autoit такого нет.
Не поможете?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Смотрите функции:

Код:
TCPConnect()
TCPSend()
TCPRecv()


И когда - то приходилось работать с протоколом.
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
Afonichev
Спасибо. Это очень сложно. Навещу ка я стол заказов)
 
Верх