Что нового

[Сеть, интернет] Проблема с кодировкой в функции _INetSmtpMail

Денис

Знающий
Сообщения
35
Репутация
8
Вопрос состоит в следующем. Как заставить эту функцию отправлять письма в той кодировки, которая мне необходима?

Дело в том что по умолчанию в заголовок письма она упрямо пишет charset=US-ASCII

Я пробовал передавать в эту функцию уже перекодированную строчку в нужной мне кодировки.

Но это решение проблемы лишь отчасти. Почтовый клиент The Bat оценил мои усилия, и отобразил строчку в той кодировки, в которой и был задумано. Остальные же клиенты, Outlook и Mozilla Thunderbird оказались не столь восприимчивы, и по всей видимости взяв кодировку из заголовка, в ней письмо целиком и отобразили.

Отсюда вопрос, как совладать с этой функцией, или если решения нет, то помогите найти решение самой задачи, отправка писем с русским содержанием. Вложения и прочие навороты меня не интересуют.

Благодарю!


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

Решил попробовать разобраться с вопросом самостоятельно.

Вот к чему пришел. В UDF <Inet.au3> нашел описание данной функции.

В следующей части кода формируются заголовки письма:
Код:
$s_Send[4] = 	"From:" & $s_FromName & "<" & $s_FromAddress & ">" & @CRLF & _
			"To:" & "<" & $s_ToAddress & ">" & @CRLF & _
			"Subject:" & $s_Subject & @CRLF & _
			"Mime-Version: 1.0" & @CRLF & _
			"Date: " & _DateDayOfWeek(@WDAY, 1) & ", " & @MDAY & " " & _DateToMonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & $bias & @CRLF & _
			"Content-Type: text/plain; charset=US-ASCII" & @CRLF & _
			@CRLF


Я немного изменил этот кусок кода на следующий:
Код:
$s_Send[4] = 	"From:" & $s_FromName & "<" & $s_FromAddress & ">" & @CRLF & _
			"To:" & "<" & $s_ToAddress & ">" & @CRLF & _
			"Subject:" & $s_Subject & @CRLF & _
			"Mime-Version: 1.0" & @CRLF & _
			"Date: " & _DateDayOfWeek(@WDAY, 1) & ", " & @MDAY & " " & _DateToMonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & $bias & @CRLF & _
			"Content-Type: text/plain; charset=cp1251" & @CRLF & "Content-Transfer-Encoding: 8bit"& @CRLF & _
			@CRLF


Предварительное тестирование на основных почтовых клиентах показало положительный результат.
Также я добавил строку "Content-Transfer-Encoding: 8bit", на мой взгляд она необходима.

Если данная функция пользуется спросом, есть смысл сделать параметр кодировки передаваемый в функцию при ее вызове. Будет полезно на мой взгляд. И выложить эту UDF в файл архив, как UDF с несколько расширенным функционалом.

Хотелось бы услышать мнения специалистов, есть ли в этом необходимость, или это разовый вариант, и каждый функцию в состоянии переделать под себя?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Попробуй отправить сообщение таким образом
Код:
$sSMTP = "[email protected]"
$sYOURMAIL = "[email protected]"
$sPASS = "your_pass_here"

SENDviaSMTP("[email protected]", "[email protected]", "Тема письма", "Текст на русском языке, который хотим принять")

Func SENDviaSMTP($sFROM, $sTO, $sSUBJ, $sBODY)
$hMAIL = ObjCreate ("CDO.Message")
	With $hMAIL
		.Bodypart.Charset = "windows-1251"; Кодировка задается тут
		.Subject = $sSUBJ
		.Sender = $sFROM
		.From = $sFROM
		.To = $sTO
		.TextBody = $sBODY
		;.AddAttachment ("");req full dictonairy; - На случай, если нужно прикрепить файл
	EndWith
	With $hMAIL.Configuration.Fields
		.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
		.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $sSMTP
		.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
		.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $sYOURMAIL
		.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $sPASS
		.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
		.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
		.Update
	EndWith
	$hMAILh.Send
	Return
EndFunc
 
Автор
Д

Денис

Знающий
Сообщения
35
Репутация
8
Код очень хороший, и выглядит как рабочий. И наверняка даже работает на крепкую пятерочку.
Но пробовать не стал по простой причине, из того что я помню по объекту CDO.Message, в систему стандартно его нет, и по моему как то он завязан на Outlook.

Этот вариант плохо подходит, потому что письма мне нужно отправлять при любых обстоятельствах, а не при условии что установлен Outlook и этот компонент доступен.

Меня больше интересует другой вопрос, стоит ли из стандартной <Inet.au3> сделать <InetEx.au3> и выложить в файловое хранилище. Я к тому что UDF в оригинале не моя, да и изменения будут только в одной функции.. Есть ли необходимость в этом?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Денис
можешь вместе со скриптом таскать вот это
Collaboration Data Objects, version 1.2.1
штука весьма полезная.
ну а если хочешь работать непосредственно с протоколом без сторонних средств, то попробуй поменять
Код:
Content-Type: text/plain; charset=US-ASCII
на
Код:
Content-Type: text/plain; charset=windows-1251


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

а вообще, помоему CDO.Message входит в состав Outlook Express, который идет в стандартной винде. поэтому должно работать, практически на любых тачках
 
Автор
Д

Денис

Знающий
Сообщения
35
Репутация
8
Kaster сказал(а):
ну а если хочешь работать непосредственно с протоколом без сторонних средств, то попробуй поменять...
Прочитай пожалуйста мой первый пост более внимательно, сравни оригинальный код, и тот который я изменил..
 

kaster

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

Денис

Знающий
Сообщения
35
Репутация
8
Прости меня пожалуйста, я не часто пишу на форуме... НО! Я же в первом посту сказал следующие: "Я немного изменил этот кусок кода на следующий:"

И даже описал результат: "Предварительное тестирование на основных почтовых клиентах показало положительный результат. Также я добавил строку "Content-Transfer-Encoding: 8bit", на мой взгляд она необходима."

А из вопросов остался лишь один: "Стоит ли оформить эту UDF как отдельную, но несколько расширенную? Расширенную потому что можно добавить параметр который будет передаваться в функцию. Параметр: кодировка письма."


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

Приношу свои извинения. Я не так понял что от меня требовалось. Я изменил кодировку на windows-1251, результат идентичен результату с кодировкой cp1251.
 
Верх