Что нового

Отправка письма на другой Email

CreatiK

Новичок
Сообщения
93
Репутация
4
Можно ли реализовать такое?
057bff320ef9.jpg


Для чего это мне?
Я практикуюсь на созданиях ботов для игр в контакте. Хочу сделать чтобы люди могли предложения давать по боту по email'у а то и так в аське спама стало много уже достали.

Код каркаса:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Отправить письмо Димке)", 376, 281, 230, 126)
$Input1 = GUICtrlCreateInput("", 16, 24, 345, 21)
$Label1 = GUICtrlCreateLabel("Тема письма", 16, 8, 72, 17)
$Edit1 = GUICtrlCreateEdit("", 16, 64, 345, 169, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
$Label2 = GUICtrlCreateLabel("Текст письма", 16, 48, 75, 17)
$Button1 = GUICtrlCreateButton("Отправить письмо", 264, 240, 89, 33, $BS_MULTILINE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
 

Arei

Скриптер
Сообщения
938
Репутация
115
мой вариант, есть один минус нужно прикреплять файл, но это может быть и плюс
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Wesoft = GUICreate("Wesoft", 377, 189, 192, 124)
$Button1 = GUICtrlCreateButton("Кнопка=)", 288, 144, 75, 25, $WS_GROUP)
$ToAddress = ("")
$FromAddress = ("")
$FromName = "Mail Sender"
$Subject = GUICtrlCreateInput("тема", 24, 32, 185, 21)
$Body = GUICtrlCreateEdit("", 24, 83, 185, 105)
GUICtrlSetData(-1, "")
$AttachFiles = GUICtrlCreateInput("Файл", 24, 56, 161, 21); прикреплённые файлы к письму
$Username = ("")
$SmtpServer = ("smtp.yandex.ru")
$Password = ("")
;$SmtpServer = "smtp.mail.ru"            ; адрес SMTP сервера
;$FromName = "Mail Sender"               ; имя отправителя
;$FromAddress = "[email protected]" ; адрес отправителя
;$ToAddress = "[email protected]"      ; адрес назначения
;$Subject = "test_mail_8"              ; тема письма
;$Body = "body_of_mail"            ; тело письма (сам текст письма)
;$Username = "zzzzzmail"            ; имя пользователя аккаунта, с которого отправляется
;$Password = "12345z"
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###




$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&" -u "&$Username&" -pw "&$Password&" -attach "&$AttachFiles

Func _SendMail($CMDstring)
    $BlatDLL = DllOpen ("blat.dll")
    Do
        $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)

        Select
            Case $result[0] = 13
                MsgBox(16,"Ошибка. Код ошибки " & $result[0], "Не могу открыть временный файл во временной папке")

            Case $result[0] = 12
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не указаны или не найдены в реестре аргументы -server или -f")

            Case $result[0] = 3
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не могу прочитать файл с текстом письма или приложенный файл")

            Case $result[0] = 2
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Почтовому серверу не понравился адрес отправителя; или он отказал нам в подключении; или неверный пароль; или не найден файл с текстом письма")
            Case $result[0] = 1
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Не могу открыть SMTP сокет. Проверьте подключение к Интернету; либо неверные аргументы")
            Case $result[0] <> 0
                MsgBox(16, "Ошибка. Код ошибки " & $result[0], "Неизвестная ошибка")
        EndSelect
    Until $result[0] = 0
    MsgBox(16, "нет ошибки.", "Письмо отправлено :-)" & @CRLF)
    DllClose ($BlatDLL)
EndFunc ;

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
               _SendMail($BlatArgs)

	EndSwitch
WEnd
 

Arei

Скриптер
Сообщения
938
Репутация
115
нужна библиотека blat.dll она на форуме есть, или в файлах я выкладывал она должна лежать там же, где и скрипт,а после компиляции не требуется.
 
Автор
C

CreatiK

Новичок
Сообщения
93
Репутация
4
Он отправляет текст только на английском?
 

renom

Новичок
Сообщения
127
Репутация
2
http://autoit-script.ru/index.php?action=downloads;sa=view;down=50
 

Arei

Скриптер
Сообщения
938
Репутация
115
renom,да это то что я выкладывал.
qsort как умею так и сделал, и нормально получилось.
 

BiG_BoY

Новичок
Сообщения
51
Репутация
1
У меня ошибку выдаёт, что мол нет соединения с интернетом.
 

Dr1N

Новичок
Сообщения
2
Репутация
0
После компиляции всё равно нужна библиотека blat.dll. Как обойти это ?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Dr1N
Код:
FileInstall
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Не проще с помощью объекта CDO.Message ?

Код:
Global $iError, $oEvent = ObjEvent('AutoIt.Error', '__cdo_error')

MsgBox(0, '', __cdo_Message('кому@domain.ru', 'имя', 'от кого@domain.ru', 'пароль', 'тема', 'сообщение'))

Func __cdo_Message($sToAddress, $sFromName, $sFromAddress, $sPassword, $sSubject = '', $sBody = '', $sAttach = '', $sServer = 'smtp.mail.ru', $iPort = 25, $iSSL = 0)
    Local $oEmail = ObjCreate('CDO.Message')
    If (Not IsObj($oEmail)) Then
        Return SetError(1, 0, 0)
    EndIf
    $oEmail.From = '"' & $sFromName & '" <' & $sFromAddress & '>'
    $oEmail.To = $sToAddress
    $oEmail.Subject = $sSubject
    $oEmail.TextBody = $sBody & @CRLF
    If ($sAttach <> '') Then
        If FileExists($sAttach) Then
            $oEmail.AddAttachment($sAttach)
        Else
            Return SetError(2, 0, 0)
        EndIf
    EndIf
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/sendusing') = 2
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/smtpserver') = $sServer
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/smtpserverport') = $iPort
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/smtpauthenticate') = 1
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/sendusername') = $sFromAddress
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/sendpassword') = $sPassword
    $oEmail.Configuration.Fields.Item('http://schemas.microsoft.com/cdo/configuration/smtpusessl') = $iSSL
    $oEmail.Configuration.Fields.Update
    $oEmail.Send
    If $iError Then
        $iError = 0
        Return SetError(3, 0, 0)
    EndIf
    Return 1
EndFunc

Func __cdo_error()
    $iError = $oEvent.Number
EndFunc
 

Arei

Скриптер
Сообщения
938
Репутация
115
Я знал, что ты эту функцию опубликуешь. :smile:
 

exHalfer

Новичок
Сообщения
12
Репутация
0
Через CDO.Message на х86 идет все как надо, а на win x64 выдает ошибку:

The requested action with this object has failed.:
$oEmail.Send
$oEmail.Send^ ERROR

Нашел blat.dll для х64 на оф. сайте, но функция от Arei, с его использованием, тоже выдает ошибку:

Subscript used with non-Array variable.:
Case $result[0] = 13
Case $result^ ERROR
 

Arei

Скриптер
Сообщения
938
Репутация
115
Удали все проверки и попробуй запустить.
 

exHalfer

Новичок
Сообщения
12
Репутация
0
Удалил все проверки - просто не отсылается письмо.
"Методом научного тыка" вернул обратно старый blat.dll и сменил Gmail на Mail.ru - все заработало. Странно только, что на ноутбуке с win x86 все работает и на Gmail.
В общем не страшно, в таком случае, буду использовать Mail.ru.
 

irshat

Новичок
Сообщения
7
Репутация
0
Может не в тему, но чтобы не засорять форум, задам здесь вопрос. Во всем форуме написано только об отправке писем с паролем, и нигде нет без пароля.
Этот пример не заработал, показал ошибку Код 50.
Код:
#include <INet.au3>

$s_SmtpServer = "mysmtpserver.com.au"
$s_FromName = "My Name"
$s_FromAddress = "From eMail Address"
$s_ToAddress = "To eMail Address"
$s_Subject = "My Test UDF"
Dim $s_Body[2]
$s_Body[0] = "Testing the new email udf"
$s_Body[1] = "Second Line"
$Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $s_Body)
$err = @error
If $Response = 1 Then
    MsgBox(0, "Success!", "Mail sent")
Else
    MsgBox(0, "Error!", "Mail failed with error code " & $err)
EndIf

На VBS через этот же сервер нормально уходит, в чем может быть проблема. Или есть другие способы отправки без аутентификации.
 

Pavel

Новичок
Сообщения
125
Репутация
3
Ребят, а кто знает как отправлять кириллические символы в нужной кодировке (версия с blat.dll)? Приходят кракозябры...
 
Верх