Что нового

Не отправляется сообщение на почту

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Доброго времени суток, на просторах форума нашел:
joiner сказал(а):
не знаю как, но работает :smile:
autoit 3.3.12.0
Код:
#AutoIt3Wrapper_Run_AU3Check= N
#include <File.au3>
$SmtpServer = 'smtp.yandex.ru'
$FromAddress = 'логин@yandex.ru'
$Username = 'логин'
$Password = 'пароль'
$ToAddress = 'адресат@inbox.ru'
$Subject = 'тема письма'
$Body = 'содержание письма'
_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
Выдает ошибку
Код:
$objEmail.Send
$objEmail^ ERROR
Как справиться?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Я пользуюсь таким методом отправки почты, попробуйте - будет ли ошибка :
Код:
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = "***@inbox.ru"
        .To = "*@inbox.ru"
        .Subject = "Test"
        .TextBody = "Test mail"
       .AddAttachment ("")  
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = "smtp.inbox.ru" ;SMTP Server
		.Item ($str & "smtpusessl") = True
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = "***@inbox.ru"
        .Item ($str & "sendpassword") = "Password" 
        .Item ($str & "smtpserverport") = 465		
        .Update
    EndWith
$hMAIL.Send
 
Автор
Dima1337

Dima1337

Осваивающий
Сообщения
186
Репутация
24
К сожалению та же шибка, не удается отправить сообщение
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Попробуйте отловить ошибку может это поможет узнать в чем проблема
Код:
ObjEvent()
 
Автор
Dima1337

Dima1337

Осваивающий
Сообщения
186
Репутация
24
image.png
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Dima1337, попробуйте использовать другой почтовый сервис

P.S. Если вы используете gmail убедитесь, что для нужного аккаунта включен доступ небезопасных приложений. В других сервисах такая настройка тоже часто присутствует
 
Автор
Dima1337

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Получилось но только через google
https://myaccount.google.com/lesssecureapps

Код:
#include <File.au3>

$SmtpServer = 'smtp.gmail.com'
$FromAddress = '********@gmail.com'
$Username = '*********'
$Password = '*********'
$ToAddress = '*********@yandex.ru'
$Subject = 'Просто письмо'
$Body = 'Буквы в письме'
$IPPort = 465

_INetSmtpMailCom($SmtpServer, '', $FromAddress, $ToAddress, $Subject, $Body, '', '', '', $Username, $Password, $IPPort)

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 = 465, $ssl = 1)
    $objEmail = ObjCreate("CDO.Message")

	Global $g_eventerror = 0 ; для проверки, чтобы знать, что COM ошибка произошла. Необходимо сбросить после обработки.
	Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; Инициализация обработчика ошибок COM

    $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 $g_eventerror Then
    $g_eventerror = 0
		MsgBox(0, "Тест AutoItCOM", "Тест пройден: Мы получили код ошибки: " & @error)
	Else
		MsgBox(0, "Тест AutoItCOM", "Тест не удался!")
	EndIf

    If @error Then
        SetError(2)
    EndIf
EndFunc   ;==>_INetSmtpMailCom

Func MyErrFunc()
    MsgBox(4096, "Тест AutoItCOM", "Мы перехватили COM ошибку !" & @CRLF & @CRLF & _
            "err.description is: " & @TAB & $oMyError.description & @CRLF & _
            "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
            "err.number is: " & @TAB & Hex($oMyError.number, 8) & @CRLF & _
            "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
            "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
            "err.source is: " & @TAB & $oMyError.source & @CRLF & _
            "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
            "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
            )

    Local $err = $oMyError.number
    If $err = 0 Then $err = -1

    $g_eventerror = $err ; для проверки после того как эта функция сработает
EndFunc
 
Верх