Войти

Показать полную графическую версию : Кодировка в письме


gkivi
10-09-2013, 11:45
Здравствуйте.
есть код:

SmtpServer = "smtp.123.ru" ; адрес SMTP сервера
$Port = "25" ; Порт SMTP сервера
$FromAddress = "123l@123.ru" ; адрес отправителя
$ToAddress = "123@123.ru" ; адрес назначения
$Subject = """текст""" ; тема письма
$Body = """Текст""" ; тело письма (сам текст письма)
$AttachFiles = "temp.txt" ; прикреплённые файлы к письму
$Username = "123@123.ru" ; имя пользователя аккаунта, с которого отправляется
$Password = "123" ; Пароль

$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)
DllClose ($BlatDLL)
EndFunc

Письмо всё прекрасно ходит с вложением но вот кодировка: ┬═╚╠└═╚┼ яЁшт√ёшыр
Как изменить на читабельную?
Спасибо.

yurfed
10-09-2013, 12:07
gkivi, очень похоже на DOS кодировку 866
А чем смотрите?

gkivi
10-09-2013, 12:20
Смотрю в Microsoft Outlook 2007, но не думаю что это он пакостит. Скрипт видимо с помощью blat сформировал письмо в заведомо неверной кодировке. Что тема письма что сам текст с абракадаброй. файл с вложением отображается нормально.

yurfed
10-09-2013, 12:35
gkivi, скопируйте текст письма и вставьте в редактор Bred 3 (http://www.astonshell.ru/freeware/bred3/).
По крайней мере сможете прочитать письмо.

gkivi
10-09-2013, 12:46
Зачем? :) я и так знаю текст письма, проблема не в том чем просмотреть, а чтобы письмо приходило уже в нормальной кодировке.

yurfed
10-09-2013, 13:18
Смотрю в Microsoft Outlook 2007, но не думаю что это он пакостит. »
Но всё же, попробуйте например Mozilla Thunderbird Portable Edition (http://mozilla-russia.org/products/thunderbird/)

gkivi
12-09-2013, 09:05
Хорошо, изложу проблему по другому.
Этот скрипт создает письмо с вложением используя blat. Тема и содержание письма при приходе на почту в абракадабре. С вложением никаких проблем.
Вывод: значит blat создаёт в не в той кодировке письмо?

oz84
13-09-2013, 14:51
gkivi
blat имеет среди ключей -unicode, нагуглил такую тему (http://sourceforge.net/p/blat/discussion/279864/thread/a9778915). Если будете пробовать, не забудьте отписаться, пожалуйста :)

oz84
15-09-2013, 03:23
gkivi, отправляйте строкой
Run (@scriptdir & "\blat.exe " & $BlatArgs, @ScriptDir, @SW_HIDE )
На всякий случай к $BlatArgs можно в конце добавить -charset UTF-8, но у меня и так отправляет. С blat.dll не прокатывает.

З.Ы. Blat версии 3.1.1, Microsoft Outlook не люблю, пользуюсь Sylpheed.

support23
17-09-2013, 16:20
такой вариант не подойдет?


$SmtpServer = "smtp.123.ru" ; адрес SMTP сервера
$Port = "25" ; Порт SMTP сервера
$FromAddress = "123l@123.ru" ; адрес отправителя
$ToAddress = "123@123.ru" ; адрес назначения
$Subject = """текст""" ; тема письма
$Body = """Текст""" ; тело письма (сам текст письм
$AttachFiles = "temp.txt"
$ToCopy = ""
$Username = "123@123.ru" ; имя пользователя аккаунта, с которого отправляется
$Password = "123" ; Пароль

$objSMTPmail = ObjCreate("CDO.Message")
$objSMTPmail.From = $FromAddress
$objSMTPmail.To = $ToAddress
$objSMTPmail.Cc = $ToCopy
$objSMTPmail.Subject = $Subject
$objSMTPmail.Textbody = $Body
$objSMTPmail.BodyPart.Charset = "utf-8"
$objSMTPmail.AddAttachment ($AttachFiles)
$objSMTPmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objSMTPmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $SMTPSERVER
$objSMTPmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $SMTPPORT
$objSMTPmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objSMTPmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = $Username
$objSMTPmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $Password
$objSMTPmail.Configuration.Fields.Update
$objSMTPmail.Send

oz84
17-09-2013, 19:43
support23, можно чуть подробнее - зачем schemas.microsoft.com?
Если не вызывать функцию blat.dll, а запускать blat.exe, то письмо уходит в UTF-8 - нет проблем ни с темой, ни с телом письма.
Как вариант попробовать заменить в функции _SendMail
$result=DllCall($BlatDLL,"int","Send","str",$CMDstring)
на
$result=DllCall($BlatDLL,"int","Send","wstr",$CMDstring)
Планировал делать GUI и вопрос о кодировке (клиент консольный все-таки) отложил, а тут такая удача :)

gkivi
18-09-2013, 07:38
Run (@scriptdir & "\blat.exe " & $BlatArgs, @ScriptDir, @SW_HIDE )
На всякий случай к $BlatArgs можно в конце добавить -charset UTF-8, но у меня и так отправляет »

Работает!
параметр -charset UTF-8 не понадобился. )
Спасибо




© OSzone.net 2001-2012