Что нового

[Сеть, интернет] Отправка введенного сообщения на электронную почту

sanf

Новичок
Сообщения
30
Репутация
0
Помогите со скриптом, в котором будет 2 строки: ввод темы и ввод сообщения, и что бы это все приходило на почту.
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Пример из справки
Код:
#include <Inet.au3>

Local $Address = InputBox('Address', 'Enter the E-Mail address to send message to')
Local $Subject = InputBox('Subject', 'Enter a subject for the E-Mail')
Local $Body = InputBox('Body', 'Enter the body (message) of the E-Mail')
MsgBox(4096, 'E-Mail has been opened', 'The E-Mail has been opened and process identifier for the E-Mail client is ' & _INetMail($Address, $Subject, $Body))

Скрипт получает ввод адреса, темы и сообщения, но никуда не отправляет, так как просто запускает почтовый клиент по умолчанию с этими данными. Далее нужно кликать по кнопкам.
Если такой вариант не устраивает - используй функцию
Код:
_INetSmtpMail($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress [, $s_Subject [, $as_Body [, $s_helo [, $s_first [, $b_trace]]]]])
. Но она требует знания доменного имени нужного SMTP сервера для отправки почты, а также твоим провайдером должен быть разрешен 25 порт. Если он закрыт - то ничего не выйдет.
Мой провайдер, например, его заблокировал для всех клиентов - для защиты от спамеров.
 
Автор
S

sanf

Новичок
Сообщения
30
Репутация
0
SMTP Server: smtp.live.com
Security: This server requires a secure connection (TLS/SSL)
Port: Default TLS/SSL Port 25

25 порт у меня открыт
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Порт открыт должен быть не у тебя на компе, а на сервере провайдера.
PS: есть еще возможность использования SMTP сервера твоего провайдера, но это нужно в техподдержке узнавать есть он или нет.
Проверь пример из справки по _INetSmtpMail - и узнаешь как у тебя обстоит дело - открывается SMTP сессия или нет.
 
Автор
S

sanf

Новичок
Сообщения
30
Репутация
0
Нашел скрипт, опробовал, все работает

Код:
;
;##################################
; Include
;##################################
#Include<file.au3>
;##################################
; Variables
;##################################
$SmtpServer = "smtp.mail.ru"             
$FromName = "имя"                      
$FromAddress = "[email protected]" 
$ToAddress = "[email protected]"   
$Subject = "тема"                 
$Body = "текст"                           
$AttachFiles = ""                     
$CcAddress = ""       					
$BccAddress = ""					   
$Importance = "Normal"                 
$Username = "******"                   
$Password = "*****"                
$IPPort = 25                           
$ssl = 0                               
                          
;##################################
; Script
;##################################

Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $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($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_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])
;~          ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                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
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    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
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail=""
 EndFunc   ;==>_INetSmtpMailCom
 ;
;
; Com Error Handler
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



Но мне нужно чтоб строки $Subject и $Body я мог ввести в форме напримере моей

Код:
$Form1 = GUICreate("Программа", 320, 200, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
$Label1 = GUICtrlCreateLabel("Тема:", 8, 10, 100, 17)
$Label2 = GUICtrlCreateLabel("Сообщение:", 8, 37, 100, 17)
$Input1 = GUICtrlCreateInput("", 112, 10, 200, 20)
$Input2 = GUICtrlCreateInput("", 112, 37, 200, 120)
$Button1 = GUICtrlCreateButton("Отправить", 112, 170, 200, 25, $BS_DEFPUSHBUTTON)
$Button2 = GUICtrlCreateButton("Отмена", 8, 170, 99, 25)
GUISetState(@SW_SHOW)

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


на действии $Button1 и ввода текста и объединения этого всего я застрял((( помогите
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
используй функция чтения из элемента управления
Код:
GUICtrlRead
 
Автор
S

sanf

Новичок
Сообщения
30
Репутация
0
Все равно не пойму как все сделать( и объеденить.....


Код:
;
;##################################
; Include
;##################################
#Include<file.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
;##################################
; Variables
;##################################
$SmtpServer = "smtp.mail.ru"            
$FromName = "имя"                      
$FromAddress = "[email protected]"
$ToAddress = "[email protected]"  
       ;$Subject = "тема"                
       ;$Body = "текст"                          
$AttachFiles = ""                    
$CcAddress = ""                        
$BccAddress = ""                       
$Importance = "Normal"                
$Username = "******"                  
$Password = "*****"                
$IPPort = 25                          
$ssl = 0                              
                         
;##################################
; Script
;##################################


$Form1 = GUICreate("Программа", 320, 200, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE))
$Label1 = GUICtrlCreateLabel("Тема:", 8, 10, 100, 17)
$Label2 = GUICtrlCreateLabel("Сообщение:", 8, 37, 100, 17)
$Input1 = GUICtrlCreateInput("", 112, 10, 200, 20)
$Input2 = GUICtrlCreateInput("", 112, 37, 200, 120)
$Button1 = GUICtrlCreateButton("Отправить", 112, 170, 200, 25, $BS_DEFPUSHBUTTON)
$Button2 = GUICtrlCreateButton("Отмена", 8, 170, 99, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Button2
            Exit
         Case $Button1
 
$Subject = GUICtrlRead($Input1)
$Body = GUICtrlRead($Input2)

??????????????????

Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
    MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
    Local $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($as_Body, "<") And StringInStr($as_Body, ">") Then
        $objEmail.HTMLBody = $as_Body
    Else
        $objEmail.Textbody = $as_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])
;~          ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
            If FileExists($S_Files2Attach[$x]) Then
                ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
                $objEmail.AddAttachment($S_Files2Attach[$x])
            Else
                ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
                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
    If Number($IPPort) = 0 then $IPPort = 25
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    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
    ;Update settings
    $objEmail.Configuration.Fields.Update
    ; Set Email Importance
    Switch $s_Importance
        Case "High"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
        Case "Normal"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
        Case "Low"
            $objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
    EndSwitch
    $objEmail.Fields.Update
    ; Sent the Message
    $objEmail.Send
    If @error Then
        SetError(2)
        Return $oMyRet[1]
    EndIf
    $objEmail=""
 EndFunc   ;==>_INetSmtpMailCom
 ;
;
; Com Error Handler
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
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Button2
            Exit
         Case $Button1
 $s_Subject = GUICtrlRead($Input1)
 $s_Body = GUICtrlRead($Input2)
_INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $s_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl = 0)
EndSwitch
WEnd

по ссылке можешь посмотреть пример реализации http://autoit-script.ru/index.php?action=downloads;sa=view;down=398
 
Автор
S

sanf

Новичок
Сообщения
30
Репутация
0
Спасибо ссылка хорошая, но хочется уже доделать этот.
Сейчас ругается на 52 строку Wend

Код:
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Button2
            Exit
         Case $Button1
 $s_Subject = GUICtrlRead($Input1)
 $s_Body = GUICtrlRead($Input2)
_INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $s_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl = 0)
WEnd
 
Автор
S

sanf

Новичок
Сообщения
30
Репутация
0
Теперь ошибка на:
Код:
_INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $s_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl = 0)

Не получается объединить...
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
смотри имена переменных. я скопировал функцию с именами переменных как есть. у тебя они другие
у тебя
Код:
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)


у меня же
Код:
_INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $s_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl = 0)

просто разница в именах.
вот мой пример переделки программы Mail Sender http://autoit-script.ru/index.php?action=downloads;sa=view;down=399
тоже переделывал для определенной ситуации. нет только поля для ввода тела письма. но я уже дал пример как это делать. делай сам. немного терпения и все получится..и научишься заодно
 
Автор
S

sanf

Новичок
Сообщения
30
Репутация
0
Спасибо все получилось, домучался)) вот только еще 1 вопрос возник, само сообщение на почту приходит иероглифами, как можно прописать кодировку для текста в окне "сообщение" или на весь текст????
 
Верх