Что нового

Не работает отправка почты

joker2d

Новичок
Сообщения
182
Репутация
0
Хочу отправить письмо со своего майл ру ящика на свой же майл ру ящик

этот код скопировал с форума вызывает ошибку
(56) : ==> The requested action with this object has failed.:
$objEmail.Send
$objEmail^ ERROR
Код:
#include <Inet.au3>


_INetSmtpMailCom("smtp.mail.ru", "gggf", "***@mail.ru", "***@mail.ru")


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 = 0)
    Local $objEmail = ObjCreate("CDO.Message")
    If Not IsObj($objEmail) Then Return SetError(1, 0, 0)

    $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]
                Return SetError(1, 0, 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 Return SetError(2, 0, '')
EndFunc



Этот код вызывает ошибку
error code 50
Код:
Local $s_SmtpServer = "smtp.mail.ru"
Local $s_FromName = "My Name"
Local $s_FromAddress = "***@mail.ru"
Local $s_ToAddress = "***@mail.ru"
Local $s_Subject = "My Test UDF"
Local $as_Body[2]
$as_Body[0] = "Testing the new email udf"
$as_Body[1] = "Second Line"
Local $Response = _INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
Local $err = @error
If $Response = 1 Then
    MsgBox(4096, "Success!", "Mail sent")
Else
    MsgBox(4096, "Error!", "Mail failed with error code " & $err)
EndIf


Еще тестил blat.dll тоже не отправляет, в чем проблема покажите рабочий пример ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
В функции _INetSmtpMailCom() последний параметр $ssl установите в единицу (или в True), а предпоследний $IPPort в 465.
 
Автор
J

joker2d

Новичок
Сообщения
182
Репутация
0
InnI
Поставил ошибка та же

==> The requested action with this object has failed.:
$objEmail.Send
$objEmail^ ERROR
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
joker2d
Во-первых, для функции _PathFull() нужно добавить
Код:
#include <File.au3>

А во-вторых, там ещё есть такие важные параметры, как логин и пароль: $s_Username, $s_Password.

У меня через mail.ru на yandex письмо ушло без проблем.
 

zert88

Новичок
Сообщения
14
Репутация
0
InnI сказал(а):
joker2d
Во-первых, для функции _PathFull() нужно добавить
Код:
#include <File.au3>

А во-вторых, там ещё есть такие важные параметры, как логин и пароль: $s_Username, $s_Password.

У меня через mail.ru на yandex письмо ушло без проблем.



Код:
#include <Inet.au3>
#include <File.au3>

_INetSmtpMailCom("smtp.yandex.ru", "[email protected]", "[email protected]", "[email protected]", '', '', '', '', '')


Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "qnt", $s_Password = "password", $IPPort = 465, $ssl = 1)
Покажите пожалуйста рабочий пример,
а то ошибка достала
$objEmail.Send
$objEmail^ ERROR
giphy.gif
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Вот рабочий пример отправки с Gmail. Не забудьте подставить свою почту и пароль
Код:
#Region переменные
   $sSmtpServer		=	"smtp.gmail.com"
   $sFromName		= 	"Имя отправителя"
   $sFromAddress	=	"[email protected]"
   $sUsername		=	"[email protected]"
   $sPassword		=	"Пароль"
   $sSubject 		=	"Тема"
   $sBody 			=	"Текст письма"
   $sToAddress		=	"получатель@mail.ru"
   $iIPPort = 465
   $iSsl = 1
   Dim $aAttach[0]		; Массив прикрепляемых файлов
   Global $oMyRet[2]
   Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#EndRegion

$rc = _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sBody, $aAttach, Default, $sUsername, $sPassword, $iIPPort, $iSsl)
If @error Then
   MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf

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
 

zert88

Новичок
Сообщения
14
Репутация
0
Код:
#Region переменные
   $sSmtpServer     =   "smtp.gmail.com"
   $sFromName       =   "kelvin.kelford"
   $sFromAddress    =   "[email protected]"
   $sUsername       =   "kelvin.kelford"
   $sPassword       =   "Password"
   $sSubject        =   "Тема"
   $sBody           =   "Текст письма"
   $sToAddress      =   "[email protected]"
   $iIPPort = 465
   $iSsl = 1

Error code:2 Description: Не удалось отправить сообщение на smtp-сервер. Код ошибки транспорта: 0х80040217. Отклик сервера: not available
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Вот так должно работать. Похоже, $sUsername должно быть равно $sFromAddress
Код:
$sFromAddress    =   "[email protected]"
$sUsername       =   $sFromAddress
 

zert88

Новичок
Сообщения
14
Репутация
0
Осталось понять, как ето дело завернуть в socks прокси?

Спасибо большое за помощь, работает в обоих случаях
Код:
$sUsername       =   "kelvin.kelford"
и
$sUsername       =   "kelvin.kelford"@gmail.com"

проблема была в регистре одного символа пароля, на трезвую голову только заметил)
вот рабочий вариант кода
Код:
#Region переменные
   $sSmtpServer     =   "smtp.gmail.com"
   $sFromName       =   "kelvin.kelford"
   $sFromAddress    =   "[email protected]"
   $sUsername       =   "kelvin.kelford"
   $sPassword       =   "Password"
   $sSubject        =   "Тема"
   $sBody           =   "Текст письма"
   $sToAddress      =   "[email protected]"
   $iIPPort = 465
   $iSsl = 1
   Dim $aAttach[0]      ; Массив прикрепляемых файлов
   Global $oMyRet[2]
   Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#EndRegion

$rc = _INetSmtpMailCom($sSmtpServer, $sFromName, $sFromAddress, $sToAddress, $sSubject, $sBody, $aAttach, Default, $sUsername, $sPassword, $iIPPort, $iSsl)
If @error Then
   MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf

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

Для yandex тоже работает
Код:
#Region переменные
   #cs
   $sSmtpServer     =   "smtp.gmail.com"
   $sFromName       =   "kelvin.kelford"
   $sFromAddress    =   "[email protected]"
   $sUsername       =   "kelvin.kelford"
   $sPassword       =   "Password"
   #ce
   $sSmtpServer     =   "smtp.yandex.ru"
   $sFromName       =   "kelvin kelford"
   $sFromAddress    =   "[email protected]"
   $sUsername       =   "[email protected]"
   $sPassword       =   "Password"
   $sSubject        =   "Тема"
   $sBody           =   "Текст письма"
   $sToAddress      =   "[email protected]"
   $iIPPort = 465
   $iSsl = 1
   Dim $aAttach[0]      ; Массив прикрепляемых файлов
   Global $oMyRet[2]
   Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
#EndRegion
 
Верх