Что нового

Как изменить кодировку тела отправляемого письма

uran238

Новичок
Сообщения
4
Репутация
0
Добрый день!
Скопипастил код с форума, сообщения отправляются gmail, с этим проблем нет, но тело письма приходят кракозябрами "ò?òÞò>ò? ò?ò£ó?ó?ò?òœ" на корпоративную почту - клиент Outlook 2016. Сам код:
Код:
#include <Encoding.au3>

#AutoIt3Wrapper_Run_AU3Check= N
#include <File.au3>
$SmtpServer = 'smtp.gmail.com'
$FromAddress = '******@gmail.com'
$Username = '*******@gmail.com'
$Password = '*******'
$ToAddress = '*********'
$Subject = 'тема письма'
$Body = _Encoding_StringToUTF8('Тело письма english')
_INetSmtpMailCom($SmtpServer, '', $FromAddress, $ToAddress, $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.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

Кто подскажет какую кодировку применять что бы и русский и казахский языки при получении программой Outlook 2016 отображались корректно?
 

gunter123

Продвинутый
Сообщения
159
Репутация
67
Я не уверен, но что-то из этого должно помочь
Код:
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/languagecode") = 1049	 
$objEmail.BodyPart.CharSet = "utf-8"
 
Автор
U

uran238

Новичок
Сообщения
4
Репутация
0
gunter123 сказал(а):
Я не уверен, но что-то из этого должно помочь
Код:
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/languagecode") = 1049	 
$objEmail.BodyPart.CharSet = "utf-8"
Проблема решилась этой функцией:
Код:
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $a_Attach = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 465, $ssl = True)
      Local $objEmail = ObjCreate("CDO.Message"), $i_Error = 0, $i_Error_desciption = ""
      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/languagecode") = 1049
      $objEmail.BodyPart.CharSet = "utf-8"
      $objEmail.BodyPart.ContentTransferEncoding = "quoted-printable"
      $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
      $objEmail.To = $s_ToAddress
      $objEmail.Subject = $s_Subject
      ;         Можно отправлять в формате HTML
      ;$objEmail.HTMLBody = $as_Body
      $objEmail.TextBody = $as_Body

      $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext") = True
      $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
      $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

      If UBound($a_Attach) > 0 Then
         For $j = 0 To UBound($a_Attach)-1
            If FileExists($a_Attach[$j]) Then
               $objEmail.AddAttachment ($aAttach[$j])
            Else
               Exit MsgBox(4096, "", "Файл " & $a_Attach[$j] & " не найден")
            EndIf
         Next
      EndIf
      If $ssl Then
         $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
      EndIf
      $objEmail.Configuration.Fields.Update
      $objEmail.Fields.Update
      $objEmail.Send
      If @error Then
         SetError(2)
         Return $oMyRet[1]
      EndIf
      $objEmail=""
EndFunc ;==>_INetSmtpMailCom

Func MyErrFunc()
   $HexNumber = Hex($oMyError.number, 8)
   $oMyRet[0] = $HexNumber
   $oMyRet[1] = StringStripWS($oMyError.description, 3)
   ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
   SetError(1); something to check for when this function returns
   Return
EndFunc ;==>MyErrFunc

Мало того, в этом же *.udf файле сначала не отображались корректно символы русс/каз. Скопировал содержимое в новый *.udf и все заработало. По всей видимости тянулась не корректная кодировка. :stars: Спасибо. ;D
 
Верх