SmtpCliet и проблема с отправкой почты
.....................Столкнулся с проблемой отправки почты при помощи класса SmtpCliet, входящего в состав .NETКазалось бы, чего проще &hellip пишем вот такой код: 1: SmtpCliet cliet = ew SmtpCliet("smtp.seve.ame") 2: 3: MailMessage message = ew MailMessage( 4: "sede@domai.com", 5: "eceive@domai.com", 6: "Test message", "body cotet") 7: 8: cliet.Sed(message)Запускаем и получаем вот такую ошибку:The message was ejected because of a foged HELO ame &dash MyPCNameПроисходит это из за того, что мой SMTP сервер в целях борьбы со спамом требует наличия корректного имени или адреса в команде HELO. Причем адрес с которого установлено соединение должен совпадать с адресом, указанным в команде. То есть сервер ожидает что то вроде &ldquoHELO cliet.domai.com&dquo а вместо этого получает &ldquoHELO MyPCName&dquo и не может определить адрес клиента. MyPCName &dash сетевое имя компьютера, который пытается отправить сообщение.К сожалению, SmtpCliet не поддерживает изменение имени домена отправителя, которое попадает в HELO. То есть стандартными методами проблему решить не удастся.В сети не так много информации на эту тему. Описание проблемы найти можно, описание причины проблемы тоже. Но найти решение, работающее в .NET приложении оказалось не так просто. Внутри SmtpCliet нужное нам значение хранится в одной из переменных класса. Однако эта переменная объявлена как pivate и напрямую изменить ее значение невозможно.Вот по этой ссылке Richad Deemig предлагает свое решение, основанное на Reflectio. Решение хорошее, но приведенный там код не может работать без изменений, так как в моем случае переменная в классе SmtpCliet по какой то причине сменила свое название. После небольшой доработки мне все таки удалось добиться отправки сообщений через мой SMTP.Модифицированный код теперь выглядит так: 1: usig System 2: usig System.Net.Mail 3: usig System.Net.NetwokIfomatio 4: usig System.Reflectio 5: 6: amespace Tiet.Net.Mail 7: { 8: /// <summay> 9: /// A exteded <see cef="SmtpCliet"/> which seds the 10: /// FQDN of the local machie i the EHLO/HELO commad. 11: /// </summay> 12: public class SmtpClietEx : SmtpCliet 13: { 14: #egio Pivate Data 15: 16: pivate static eadoly FieldIfo localHostName = GetLocalHostNameField() 17: 18: #edegio 19: 20: #egio Costucto 21: 22: /// <summay> 23: /// Iitializes a ew istace of the <see cef="SmtpClietEx"/> class 24: /// that seds e-mail by usig the specified SMTP seve ad pot. 25: /// </summay> 26: /// <paam ame="host"> 27: /// A <see cef="Stig"/> that cotais the ame o 28: /// IP addess of the host used fo SMTP tasactios. 29: /// </paam> 30: /// <paam ame="pot"> 31: /// A <see cef="It32"/> geate tha zeo that 32: /// cotais the pot to be used o host. 33: /// </paam> 34: /// <exceptio cef="AgumetNullExceptio"> 35: /// <paamef ame="pot"/> caot be less tha zeo. 36: /// </exceptio> 37: public SmtpClietEx(stig host, it pot) : base(host, pot) 38: { 39: Iitialize() 40: } 41: 42: /// <summay> 43: /// Iitializes a ew istace of the <see cef="SmtpClietEx"/> class 44: /// that seds e-mail by usig the specified SMTP seve. 45: /// </summay> 46: /// <paam ame="host"> 47: /// A <see cef="Stig"/> that cotais the ame o 48: /// IP addess of the host used fo SMTP tasactios. 49: /// </paam> 50: public SmtpClietEx(stig host) : base(host) 51: { 52: Iitialize() 53: } 54: 55: /// <summay> 56: /// Iitializes a ew istace of the <see cef="SmtpClietEx"/> class 57: /// by usig cofiguatio file settigs. 58: /// </summay> 59: public SmtpClietEx() 60: { 61: Iitialize() 62: } 63: 64: #edegio 65: 66: #egio Popeties 67: 68: /// <summay> 69: /// Gets o sets the local host ame used i SMTP tasactios. 70: /// </summay> 71: /// <value> 72: /// The local host ame used i SMTP tasactios. 73: /// This should be the FQDN of the local machie. 74: /// </value> 75: /// <exceptio cef="AgumetNullExceptio"> 76: /// The popety is set to a value which is 77: /// <see lagwod="ull"/> o <see cef="Stig.Empty"/>. 78: /// </exceptio> 79: public stig LocalHostName 80: { 81: get 82: { 83: if (ull == localHostName) etu ull 84: etu (stig)localHostName.GetValue(this) 85: } 86: set 87: { 88: if (stig.IsNullOEmpty(value)) 89: { 90: thow ew AgumetNullExceptio("value") 91: } 92: if (ull != localHostName) 93: { 94: localHostName.SetValue(this, value) 95: } 96: } 97: } 98: 99: #edegio100: 101: #egio Methods102: 103: /// <summay>104: /// Retus the pice "localHostName" field.105: /// </summay>106: /// <etus>107: /// The <see cef="FieldIfo"/> fo the pivate108: /// "localHostName" field.109: /// </etus>110: pivate static FieldIfo GetLocalHostNameField()111: {112: BidigFlags flags = BidigFlags.Istace | BidigFlags.NoPublic113: etu typeof(SmtpCliet).GetField("clietDomai", flags)114: }115: 116: /// <summay>117: /// Iitializes the local host ame to 118: /// the FQDN of the local machie.119: /// </summay>120: pivate void Iitialize()121: {122: IPGlobalPopeties ip = IPGlobalPopeties.GetIPGlobalPopeties()123: if (!stig.IsNullOEmpty(ip.HostName) && !stig.IsNullOEmpty(ip.DomaiName))124: {125: this.LocalHostName = ip.HostName + "." + ip.DomaiName126: }127: }128: 129: #edegio130: }131: }Код отправки почты также немного изменился: 1: SmtpClietEx cliet = ew SmtpClietEx("smtp.seve.ame") 2: cliet.LocalHostName = "cliet.domai.com" 3: MailMessage message = ew MailMessage( 4: "sede@domai.com", 5: "eceive@domai.com", 6: "Test message", "body cotet") 7: 8: cliet.Sed(message)
Pagma 6.0.100.5
Pagma 6.0- многоязычная программа машинного перевода для перевода >>>
ICQ 7.0.1205
ICQ (аббревиатура фонетически созвучна английской фразе "I seek you" (ай сік ю) >>>
Фоторамки ко дню Св. Валентина. Сборник 3
Фоторамка >>>
Рекомендуем еще
HTML-редактор Aachophilia 4.0
- Одна из лучших программ для создания HTML-страниц. При помощиНачнем приложение с Qooxdoo
Люди у нас в основном своем большинстве либо новички (желают создать свой сайт и стать крутыми веб-девелоперами), либо сидят подВыравнивание в HTML
Html существует универсальный параметр и зовется он ALIGN. Его можно применять с различными тегами html:p | h1 | divМеню в Joomla — добавление нового меню в Joomla 1.5, создание и настройка модуля для меню
Здравствуйте уважаемые читатели блога KtoNaNovekogo.u. В предыдущих статьях рубрики Основы работы с Joomla 1.5 я уже рассказывал о структуре шаблонов для Joomla в статье Шаблоны для Joomla — выбор шаблона (платные, бесплатные или взломанные), где скачать шаблоны для Joomla 1.5, как их установить, активировать и настроить. В любых шаблонах для Joomla обязательно будут предусмотрены [...]Последнее
Media Metrix: всплывающие окна дают обезумевший трафик
Цветовая схема для Visual Studio 2008
Конструктор сайтов: достоинства и недостатки
IE6 и прозрачность PNG - необычный подход
Получите Яндекс.Почту для своего домена бесплатно и прямо сейчас.
Коммерсант подъезжает к своему офису, в котором час назад раздался взрыв
OpeaCache3.0.0.5 – программа для извлечения из кэша браузера различных ресурсов.
регистрация Вашего сайта в 12503 каталогах Рунета!
"Компьютер Пресс №10" адресован в первую очередь специалистам в области информационных технологий.
Шестое издание "HTML и XHTML" - самая полная и современная книга по языкам HTML и XHTML