Что нового

Отправка E-mail Error with object

avtoIT

Новичок
Сообщения
94
Репутация
0
При вызове этой функции часто бывает ошибка работы с объектом (краш, дальше программа не работает). Эта проблема стало довольно часто повторяться, что можно сделать, возможно, есть еще какой-то способ отправки? (отправляю через smtp.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 = 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
 

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") = "******" ;Пароль SMTP-сервер
        .Item ($str & "smtpserverport") = 465		;Порт
        .Update
    EndWith
$hMAIL.Send
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Ну очень и очень много раз это уже обсуждалось...
Как быть если свойством или методом объекта является ключевое слово AutoIt

Как вариант, можете перейти на другую версию AutoIt, например 3.3.10.2 или меньше, либо наоборот скачать самую новую бета версию, а точнее, нужен лишь au3check из них.

Или как вариант добавить перед функцией
Код:
#AutoIt3Wrapper_Run_AU3Check=n


Или же использовать способ через Assign (Ответ #3), что не очень удобно...


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

OffTopic:
Если это такая проблема, о которой я подумал...
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
alex33 сказал(а):
OffTopic:
Если это такая проблема, о которой я подумал...

OffTopic:
нет, не та, наверное, я не совсем ясно выразился:smile: имел ввиду то, что при самом запуске этой функции (уже скомпилированный exe) бывает примерно в 3% вылазит окно AutoIt" ошибка с объектом", после чего скрипт дальше уже ничего не обрабатывает, а закрывается
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Ну, я с таким не встречался... У меня только помню было увеличение памяти и нагрузки на процессор немного и всё...
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если это такая проблема, о которой я подумал...
Если свойством или методом объекта является ключевое слово, то скомпилированный ранее скрипт не будет вызывать ошибки, ошибка будет, если запускать НЕ скомпилированный , притом всегда. Я сталкивался с подобной проблемой на версии AutoIt 3.3.10 и это решилось, как Вы правильно отметили заменой au3check. Сдесь же проблема иного характера, возможно в функцию отправки почты передаются (иногда) не корректные параметры , что можно проконтролировать , например - в случае ошибки вызвать "MsgBox" со всеми параметрами .
 
Верх