Что нового

Помогите прикрутить прокси к скрипту

DezmontDeXa

Новичок
Сообщения
23
Репутация
0
И так есть код для отправки писем через "s.m.t.p.a.o.l.c.o.m(низя мне ссылки оставлять)". И все бы было здорово, но АОЛ блочит как спам. Слал с разных ящиков, так что проблема именно между мной и смтп сервером.
Вопрос: Как прикрутить к этому коду прокси? Нужны HTTP/s(дополнительно было бы не плохо Socks4/5). Я от веб-темы далек очень, и код ниже стараюсь почти не трогать. Потихоньку разбираюсь. О прокси имею лишь общее представление, потмоу прошу не грузить серьезными терминами) Попроще мне надо)
Код:
;##################################
; Include
;##################################
#Include<file.au3>
;##################################
; Variables
;##################################
$SmtpServer = "smtp.aol.com"     ; address for the smtp-server to use - REQUIRED
$FromName = $CmdLine[1]                      ; name from who the email was sent
$FromAddress = $CmdLine[1] ; address from where the mail should come
$ToAddress = "[email protected]"   		; destination address of the email - REQUIRED
$Subject = "Userinfo"                   ; subject from the email - can be anything you want it to be
$Body = ""                              ; the messagebody from the mail - can be left blank but then you get a blank mail
$AttachFiles = ""                       ; the file(s) you want to attach seperated with a ; (Semicolon) - leave blank if not needed
$CcAddress = "[email protected]"       ; address for cc - leave blank if not needed
$BccAddress = "[email protected]"     ; address for bcc - leave blank if not needed
$Importance = "High"                  	; Send message priority: "High", "Normal", "Low"
$Username = $CmdLine[1]    ; username for the account used from where the mail gets sent - REQUIRED
$Password = $CmdLine[2]                  ; password for the account used from where the mail gets sent - REQUIRED
$IPPort = 465                            ; port used for sending the mail
$ssl = 1                                ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465                          ; GMAIL port used for sending the mail
;~ $ssl=1                               ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS


;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Global $file = FileOpen(@SCriptdir&"\goodFlat.txt", 1)
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
    ConsoleWrite("Error code: " & @error & "  Description: " & $rc)
	FileWriteLine($file, $Username&":"&$Password&' = 0'&$rc)
 Else
	FileWriteLine($file, $Username&":"&$Password&' = 1')
 EndIf

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
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
 
A

Alofa

Гость
DezmontDeXa сказал(а):
... код ниже стараюсь почти не трогать. Потихоньку разбираюсь...
А я вот тронул к себе в копилку:
Код:
Global $iError, $oEvent = ObjEvent('AutoIt.Error', '__CDO_error')

Local $sToAddress = '[email protected]' ; ......... E-mail получателя
Local $sFromAddress = '[email protected]' ; ... E-mail отправителя
Local $sSendPassword = '123456789' ; ......... Пароль E-mail отправителя
Local $sFromName = 'Вася Пупкин' ; ........... Имя отправителя
Local $sSubject = 'Тема письма' ; ............ Тема письма
Local $sBody = 'Ссылка: <a href="http://autoit-script.ru/index.php">Русское сообщество AutoIt</a>.
' ; ... Текст письма
Local $vAttach[2] = ['C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg', 'C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg']

$iVal = _CDO_Message($sToAddress, $sFromAddress, $sSendPassword, $sFromName, $sSubject, $sBody, False, $vAttach, 'smtp.mail.ru')
MsgBox(0, @error, $iVal, 1)

; ============================================================================================
; Имя функции : _CDO_Message
; Описание    : Отправляет электронную почту по протоколу SMTP
; Синтаксис   : _CDO_Message($sToAddress, $sFromAddress, $sFromPassword[, $sFromName[, $sSubject[, $sBody[, $sBodyType[, $vAttach[, $sSMTPServer[, $iSMTPPort]]]]]]])
; Параметры   : $sToAddress		-	E-mail получателя.
;				$sFromAddress	-	E-mail отправителя.
;				$sFromPassword	-	Пароль E-mail отправителя.
;				$sFromName		-	Имя отправителя.
;				$sSubject		-	Тема письма.
;				$sBody			-	Текст письма.
;				$sBodyType		-	Тип тела письма. True - Простой текст (по умолчанию), False - HTML код.
;				$vAttach		-	Прикрепляемые файлы. Это может быть массив с адресами файлов или строка, адреса файлов в которой разделены знаком "|".
;				$sSMTPServer	-	SMTP сервер. По умолчанию "smtp.inbox.ru"
;				$iSMTPPort		-	Порт SMTP сервера. По умолчанию 25.
; Возвращает  : Успех - возвращает 1.
;				Неудача - возвращает 0 и устанавливает
;						@error = 1 - не заполнен минимальный набор параметров функции
;						@error = 2 - не удалось создать объект "CDO.Message"
;						@error = 3 - один или несколько из прикрепляемых файлов не существуют
;						@error = 4 - другие ошибки COM.
; Автор       :
; Примечания  :
; ============================================================================================
Func _CDO_Message($sToAddress, $sFromAddress, $sFromPassword, $sFromName = '', $sSubject = '', $sBody = '', $sBodyType = True, $vAttach = '', $sSMTPServer = 'smtp.inbox.ru', $iSMTPPort = 25)
	If Not $sToAddress Or Not $sFromAddress Or Not $sFromPassword Then Return SetError(1, 0, 0)
	Local $sCDOConfig = 'http://schemas.microsoft.com/cdo/configuration/', $oEmail = ObjCreate('CDO.Message')
	If (Not IsObj($oEmail)) Then Return SetError(2, 0, 0)

	With $oEmail
		.From = '"' & $sFromName & '" <' & $sFromAddress & '>'
		.To = $sToAddress
		.Subject = $sSubject
		
		If Not $sBodyType Then
			.HTMLBody = $sBody
		Else
			.TextBody = $sBody
		EndIf
		
		If $vAttach Or IsArray($vAttach) Then
			If Not IsArray($vAttach) Then $vAttach = StringSplit($vAttach, '|', 2)
			For $i = 0 To UBound($vAttach) - 1
				If Not FileExists($vAttach[$i]) Then Return SetError(3, 0, 0)
			Next
			For $i = 0 To UBound($vAttach) - 1
				.AddAttachment($vAttach[$i])
			Next
		EndIf
	EndWith

	With $oEmail.Configuration.Fields
		.Item($sCDOConfig & 'sendusing') = 2 ; ................. 1 - если на компьютере стоит только IIS (почтовый профиль не настроен), то сообщение кладется в каталог Pickup - оттуда его забирает служба SMTP и перенаправляет в соответствии со своими настройками.
		.Item($sCDOConfig & 'smtpserver') = $sSMTPServer ; ..... ["smtp.mail.ru"]
		.Item($sCDOConfig & 'smtpserverport') = $iSMTPPort ; ... [465]
		.Item($sCDOConfig & "smtpusessl") = True ; ............. SSL
		.Item($sCDOConfig & 'smtpauthenticate') = 1 ; .......... 0 – без аутентификации (анонимно), 1 - используется базовая аутентификация, 2 – аутентификация NTLM
		.Item($sCDOConfig & 'sendusername') = $sFromAddress
		.Item($sCDOConfig & 'sendpassword') = $sFromPassword
		.Update
	EndWith

	$oEmail.Send
	If $iError Then
		$iError = 0
		Return SetError(4, 0, 0)
	EndIf
	Return 1
EndFunc   ;==>_CDO_Message

Func __CDO_error()
	$iError = $oEvent.Number
EndFunc   ;==>__CDO_error
Может так полегче будет разобрать код.
 
Автор
D

DezmontDeXa

Новичок
Сообщения
23
Репутация
0
Alofa сказал(а):
DezmontDeXa сказал(а):
... код ниже стараюсь почти не трогать. Потихоньку разбираюсь...
А я вот тронул к себе в копилку:
Код:
Global $iError, $oEvent = ObjEvent('AutoIt.Error', '__CDO_error')

Local $sToAddress = '[email protected]' ; ......... E-mail получателя
Local $sFromAddress = '[email protected]' ; ... E-mail отправителя
Local $sSendPassword = '123456789' ; ......... Пароль E-mail отправителя
Local $sFromName = 'Вася Пупкин' ; ........... Имя отправителя
Local $sSubject = 'Тема письма' ; ............ Тема письма
Local $sBody = 'Ссылка: <a href="http://autoit-script.ru/index.php">Русское сообщество AutoIt</a>.
' ; ... Текст письма
Local $vAttach[2] = ['C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg', 'C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg']

$iVal = _CDO_Message($sToAddress, $sFromAddress, $sSendPassword, $sFromName, $sSubject, $sBody, False, $vAttach, 'smtp.mail.ru')
MsgBox(0, @error, $iVal, 1)

; ============================================================================================
; Имя функции : _CDO_Message
; Описание    : Отправляет электронную почту по протоколу SMTP
; Синтаксис   : _CDO_Message($sToAddress, $sFromAddress, $sFromPassword[, $sFromName[, $sSubject[, $sBody[, $sBodyType[, $vAttach[, $sSMTPServer[, $iSMTPPort]]]]]]])
; Параметры   : $sToAddress		-	E-mail получателя.
;				$sFromAddress	-	E-mail отправителя.
;				$sFromPassword	-	Пароль E-mail отправителя.
;				$sFromName		-	Имя отправителя.
;				$sSubject		-	Тема письма.
;				$sBody			-	Текст письма.
;				$sBodyType		-	Тип тела письма. True - Простой текст (по умолчанию), False - HTML код.
;				$vAttach		-	Прикрепляемые файлы. Это может быть массив с адресами файлов или строка, адреса файлов в которой разделены знаком "|".
;				$sSMTPServer	-	SMTP сервер. По умолчанию "smtp.inbox.ru"
;				$iSMTPPort		-	Порт SMTP сервера. По умолчанию 25.
; Возвращает  : Успех - возвращает 1.
;				Неудача - возвращает 0 и устанавливает
;						@error = 1 - не заполнен минимальный набор параметров функции
;						@error = 2 - не удалось создать объект "CDO.Message"
;						@error = 3 - один или несколько из прикрепляемых файлов не существуют
;						@error = 4 - другие ошибки COM.
; Автор       :
; Примечания  :
; ============================================================================================
Func _CDO_Message($sToAddress, $sFromAddress, $sFromPassword, $sFromName = '', $sSubject = '', $sBody = '', $sBodyType = True, $vAttach = '', $sSMTPServer = 'smtp.inbox.ru', $iSMTPPort = 25)
	If Not $sToAddress Or Not $sFromAddress Or Not $sFromPassword Then Return SetError(1, 0, 0)
	Local $sCDOConfig = 'http://schemas.microsoft.com/cdo/configuration/', $oEmail = ObjCreate('CDO.Message')
	If (Not IsObj($oEmail)) Then Return SetError(2, 0, 0)

	With $oEmail
		.From = '"' & $sFromName & '" <' & $sFromAddress & '>'
		.To = $sToAddress
		.Subject = $sSubject
		
		If Not $sBodyType Then
			.HTMLBody = $sBody
		Else
			.TextBody = $sBody
		EndIf
		
		If $vAttach Or IsArray($vAttach) Then
			If Not IsArray($vAttach) Then $vAttach = StringSplit($vAttach, '|', 2)
			For $i = 0 To UBound($vAttach) - 1
				If Not FileExists($vAttach[$i]) Then Return SetError(3, 0, 0)
			Next
			For $i = 0 To UBound($vAttach) - 1
				.AddAttachment($vAttach[$i])
			Next
		EndIf
	EndWith

	With $oEmail.Configuration.Fields
		.Item($sCDOConfig & 'sendusing') = 2 ; ................. 1 - если на компьютере стоит только IIS (почтовый профиль не настроен), то сообщение кладется в каталог Pickup - оттуда его забирает служба SMTP и перенаправляет в соответствии со своими настройками.
		.Item($sCDOConfig & 'smtpserver') = $sSMTPServer ; ..... ["smtp.mail.ru"]
		.Item($sCDOConfig & 'smtpserverport') = $iSMTPPort ; ... [465]
		.Item($sCDOConfig & "smtpusessl") = True ; ............. SSL
		.Item($sCDOConfig & 'smtpauthenticate') = 1 ; .......... 0 – без аутентификации (анонимно), 1 - используется базовая аутентификация, 2 – аутентификация NTLM
		.Item($sCDOConfig & 'sendusername') = $sFromAddress
		.Item($sCDOConfig & 'sendpassword') = $sFromPassword
		.Update
	EndWith

	$oEmail.Send
	If $iError Then
		$iError = 0
		Return SetError(4, 0, 0)
	EndIf
	Return 1
EndFunc   ;==>_CDO_Message

Func __CDO_error()
	$iError = $oEvent.Number
EndFunc   ;==>__CDO_error
Может так полегче будет разобрать код.

Спасибо, действительно выглядит намного лучше)


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

И еще вопрос возник, по данному скрипту. Не удается засунуть в Subject и Body строки. Только по одному слову шлет. Что не так?
 
Автор
D

DezmontDeXa

Новичок
Сообщения
23
Репутация
0
Alofa сказал(а):
DezmontDeXa сказал(а):
... Только по одному слову шлет.
Предоставьте пример, как вы это делаете.

Извиняюсь, ток-ток разобрался с отправкой строк. Я скрипт отправки скомпилировал. Нужным переменным присвоил $CmdLine. И с другого скрипта(в котором GUI) вызываю с нужными мне параметрами. Трабл был в строчке где указываются параметры. Там нужно очень внимательно смотреть за кавычками.


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

Alofa сказал(а):
DezmontDeXa сказал(а):
... Только по одному слову шлет.
Предоставьте пример, как вы это делаете.

Код:
With $oEmail
        .From = '"' & $sFromName &'"'
        .To = $sToAddress
        .Subject = '"' & $sSubject &'"'
        .TextBody = '"' & $sBody &'"'
    EndWith


Многострочное тело письма можно сделать только с помощью htmlbody?
 
Верх