Что нового

[Сеть, интернет] Как отправить Email сообщение на русском языке без использования других прог

Юрчище

Новичок
Сообщения
16
Репутация
0
Пользовательская функция _INetSmtpMail отправляет сообщение только на английском языке.
А как можно отправить сообщение на русском языке ?
Заранее спасибо
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Код:
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = "[email protected]"
        .To = "[email protected]"
        .Subject = "Test"
        .TextBody = "Test"
        .AddAttachment ("C:\boot.ini") ;файл для отправки
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = "smtp.mail.ru" ;SMTP Server
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = "[email protected]"
        .Item ($str & "sendpassword") = "pss" ;Пароль SMTP-сервер
        .Item ($str & "smtpserverport") = 2525 ;Порт
        .Update
    EndWith
$hMAIL.Send


http://www.blat.net/

Код:
$SmtpServer = "smtp.mail.ru"    ; адрес SMTP сервера
$Port = "2525"					; Порт SMTP сервера
$FromAddress = "[email protected]" 	; адрес отправителя
$ToAddress = "[email protected]"   	; адрес назначения
$Subject = """тема письма"""    ; тема письма
$Body = """Tekst v imeila"""    ; тело письма (сам текст письма)
$AttachFiles = "C:\boot.ini"	; прикреплённые файлы к письму
$Username = "[email protected]"    	; имя пользователя аккаунта, с которого отправляется
$Password = "pss"       		; Парол

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

_SendMail($BlatArgs)

Func _SendMail($CMDstring)
    $BlatDLL = DllOpen ("blat.dll")
    $result=DllCall($BlatDLL,"int","Send","str",$CMDstring)
    MsgBox(16, "Няма грешки.", "Писмото е изпратено :-)" & @CRLF)
    DllClose ($BlatDLL)
EndFunc
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Использовал данный код, русский текст отправляет вот так

Код:
╧ютхЁх ь юЄё√ыъє

Никто не подскажет, что это за кодировка?
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Код:
.BodyPart.Charset= "UTF-8" ;кодировка на писмото "windows-1251"
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Пардон, за некорректность. я про второй пример, с blat. Как там кодировку эту поправить?
А в первом пример какой-то шлюз Microsoft используется?
А вот еще был пример на форуме, никак не найду тему, где он был, да и логичней было бы все в одном месте собрать
Код:
SendMail('Кому@mail.ru', 'От кого@mail.ru', 'Пароль', 'Тема', 'Сообщение')

Func SendMail($To, $sFrom, $sPassw, $sSubject, $sMessage, $attach)
    TCPStartup()

    $iSocket = TCPConnect(TCPNameToIP('smtp.mail.ru'), 25)
    TCPSend($iSocket, 'HELO ' & @LogonDomain & @CRLF)

    While 1
        $sRecv = TCPRecv($iSocket, 2048)
        If $sRecv <> '' Then
            If StringRegExp($sRecv, '250 smtp(.*).mail.ru') Then TCPSend($iSocket, 'AUTH LOGIN' & @CRLF)
            If StringInStr($sRecv, 'VXNlcm5hbWU6') Then TCPSend($iSocket, _Base64_Encode($sFrom))
            If StringInStr($sRecv, 'UGFzc3dvcmQ6') Then TCPSend($iSocket, _Base64_Encode($sPassw))
            If StringInStr($sRecv, 'Authentication succeeded') Then
                TCPSend($iSocket, 'MAIL FROM: ' & $sFrom & @CRLF)
                TCPSend($iSocket, 'RCPT TO: ' & $To & @CRLF)
            EndIf
            If StringInStr($sRecv, '250 Accepted') Then TCPSend($iSocket, 'DATA' & @CRLF)
            If StringInStr($sRecv, '354 Enter message') Then
                TCPSend($iSocket, 'From: ' & $sFrom & @CRLF)
                TCPSend($iSocket, 'Subject: ' & $sSubject & @CRLF & @CRLF)
                TCPSend($iSocket, $sMessage & @CRLF)
                TCPSend($iSocket, '.' & @CRLF )
            EndIf
            If StringInStr($sRecv, '250 OK id=') Then
                TCPSend($iSocket, 'QUIT' & @CRLF)
                ExitLoop
            EndIf
        EndIf
        Switch StringMid($sRecv, 1, 3)
            Case 421 To 554
                Return SetError(-1, 0, 0)
        EndSwitch
    Wend

    TCPCloseSocket($iSocket)
    TCPShutdown()
    Return 1
EndFunc

Func _Base64_Encode($sData, $iFlag = 1)
    Local $Ret, $bData, $tData, $tText
    $bData = StringToBinary($sData, $iFlag)
    $tData = DllStructCreate('byte[' & BinaryLen($bData) & ']')
    DllStructSetData($tData, 1, $bData)
    $Ret = DllCall('crypt32.dll', 'bool', 'CryptBinaryToStringW', 'ptr', DllStructGetPtr($tData), 'dword', DllStructGetSize($tData), 'dword', 1, 'ptr', 0, 'dword*', 0)
    If (@error) Or (Not $Ret[0]) Then
        Return SetError(1, 0, '')
    EndIf
    $tText = DllStructCreate('wchar[' & $Ret[5] & ']')
    $Ret = DllCall('crypt32.dll', 'bool', 'CryptBinaryToStringW', 'ptr', DllStructGetPtr($tData), 'dword', DllStructGetSize($tData), 'dword', 1, 'ptr', DllStructGetPtr($tText), 'dword*', $Ret[5])
    If (@error) Or (Not $Ret[0]) Then
        Return SetError(1, 0, '')
    EndIf
    Return DllStructGetData($tText, 1)
EndFunc


Вопрос остался как прикрепить вложение? Не нашел информации с Инете...
 
Автор
Ю

Юрчище

Новичок
Сообщения
16
Репутация
0
Обязательно нужно добавить Sleep(100) в этом месте:

Код:
            If StringInStr($sRecv, 'Authentication succeeded') Then
                TCPSend($iSocket, 'MAIL FROM: ' & $sFrom & @CRLF)
Sleep(100)   ;У меня без него НЕ работало !!!
                TCPSend($iSocket, 'RCPT TO: ' & $To & @CRLF)
            EndIf
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
araneon
Да вставь его перед или после
Код:
.TextBody = "Test"
 

araneon

Новичок
Сообщения
59
Репутация
0
блин это к
Код:
$hMAIL = ObjCreate ("CDO.Message")
:(
Мне нужно для blat.dll :( может кто в курсе как заставить blat.dll отправлять письма с читаемым русским текстом, а то
+BE8EAQRIBEIERQQE--
да
Єхьр яшё№ьр-
вот код который использую (не мой)

Код:
$SmtpServer = "10.233.200.110"    ; адрес SMTP сервера
$Port = "25"                  ; Порт SMTP сервера
$FromAddress = @UserName   ; адрес отправителя
$ToAddress = "[email protected]"     ; адрес назначения
$Subject = """тема письма"""    ; тема письма
$Body = """привет"""    ; тело письма (сам текст письма)
$charset = "Windows-1251"

$BlatArgs = "-t "&$ToAddress&" -f "&$FromAddress&" -s "&$Subject&" -body "&$Body&" -server "&$SmtpServer&"  -portSMTP "&$Port&"  -charset "&$charset

_SendMail($BlatArgs)

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
    ConsoleWrite ("Письмо отправлено :-)" & @CRLF)

    DllClose ($BlatDLL)
EndFunc


Адрес отправителя стоит
Код:
@UserName
, так и должно так как почта локальная.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
а сменить значение $charset не помогает?
если нет, попробуй заюзай Encoding.au3 и перед отправкой кодируй текст...
 

araneon

Новичок
Сообщения
59
Репутация
0
alex33 [?]
а сменить значение $charset не помогает?
пробовал, чёт не помогло.

попробуй заюзай Encoding.au3 и перед отправкой кодируй текст...
спасибо, сейчас попробую.


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

ЯХУ ;D получилось

Код:
#include <Encoding.au3>
$BodyU = _Encoding_ANSIToOEM($Body)
$SubjectU= _Encoding_ANSIToOEM($Subject)

хотя остальные не проверял :whistle:
и ещё странность в конце темы и самого сообщения почему то ставится дефис - :scratch:
 

yaoleg

Новичок
Сообщения
3
Репутация
0
[Автоматизация] Re: [Сеть, интернет] Как отправить Email сообщение на русском языке без использова

Здравствуйте!
Помогите пожалуйста понять, как отправить архив на электронную почту по маске файла: abc_09-04-2013.zip ?
Как задать значение
Код:
$attach
? :stars:
Большое спасибо!!!
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
yaoleg
Посмотри функцию
Код:
_FileListToArray
 

yaoleg

Новичок
Сообщения
3
Репутация
0
Что-то у меня ничего не получается, может кто что поконкретнее подскажет? :(
Код:
$aA = _FileListToArray("c:\Downloads\mail\", '*.zip', 1)
for $i = 1 to $aA[0]
$sFile = $aA[$i]
 

Се-рё-жа

Новичок
Сообщения
13
Репутация
0
В моём случае необходимо отправить файл .zip размером 50 МБ. Возможно ли прикрепить такой файл не разбивая его? Попробовал отправить с помощью CDO - ошибка. Почта - mail.ru. Хотя маленький файл отправил без проблем. Подозреваю, что сервер не дает отсылать такие файлы. Если отправлять вручную через браузер - файл помещается в какое-то хранилище. Может кто знает в этом нюансы?
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Код:
PingG()

Func PingG()
Sleep(1000)
$var = Ping("www.google.com",1000)
If $var Then
SendMeil()
Else
PingG()
EndIf
EndFunc

Func SendMeil()
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
With $hMAIL
.From = "[email protected]" ;Имейла от когото изпращате
.To = "[email protected]" ;Имейла на когото ще изпращате
.Subject = "Относно" ;Относно
;.TextBody = "Текст" ;Текст на имейла ако е в обикновен формат
.BodyPart.Charset= "UTF-8" ;кодировка на писмото "windows-1251"
.HTMLBody = "<b>Текст Текст Текст</b></br>" ;В HTML формат
.AddAttachment ("C:\boot.ini") ;Файл за изпращане
EndWith
With $hMAIL.Configuration.Fields
.Item ($str & "sendusing") = 2
.Item ($str & "smtpserver") = "smtp.abv.bg" ;smtp сървар
.Item ($str & "smtpauthenticate") = 1
.Item ($str & "sendusername") = "[email protected]" ;Имейла на smtp сървара
.Item ($str & "sendpassword") = "pss" ;Парола на smtp сървара
.Item ($str & "smtpusessl") = 1 ;TLS/SSL 0 е спрян
.Item ($str & "smtpserverport") = 465 ;Порт
.Update
EndWith
$hMAIL.Send
EndFunc


http://secrets-bg.com/portal/forum/04/2/index.php?cls=2
http://autoit-script.ru/index.php?topic=12508.msg80728#msg80728
 
Верх