Что нового

[Сеть, интернет] Проблема с кодировкой в функции _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.
 
Верх