Отправка вложения в приложении C # по электронной почте - PullRequest
3 голосов
/ 24 июля 2010

Мы разрабатываем приложение .Net Windows на C # для коммерческого распространения.

Цель

Я хочу добавить функцию, позволяющую пользователю отправлять файлы по электронной почте любому получателю электронной почты из приложения, не требуя почтового клиента на своем ПК, просто подключение к Интернету. Письмо, которое он отправляет, должно показаться, что оно пришло от них (т.е. их адрес электронной почты находится в поле FROM / REPLYTO), чтобы получатель мог определить, откуда пришло письмо, и он может ответить на него.

Текущий подход

Я намеревался использовать класс MailMessage в System.Net.Mail, но для отправки электронной почты требуется SMTP-сервер. Проблема в том, что я не хочу, чтобы пользователю приходилось настраивать что-либо для отправки писем из нашего приложения - я хочу, чтобы оно было настроено нами. Другими словами, я хочу определить, с какого SMTP-сервера отправлять электронную почту, и жестко закодировать ее в приложении.

Я пытался использовать Gmail в качестве SMTP-сервера, однако один существенный недостаток - Gmail автоматически переписывает строку «От» любого электронного письма, отправляемого через их SMTP-шлюз, на ваш адрес Gmail, поэтому, когда мы это проверяли, даже хотя в коде MailMessage мы установили для свойства FROM myemail@mycompany.com, когда письмо было получено, в поле «От» отображалось mygmailemail@gmail.com

.

Вопросы

  1. Если это приложение будет распространяться среди многих пользователей в разных сетевых средах, лучше ли использовать этот метод? Если да, есть ли свободный / общедоступный SMTP-сервер, который я могу использовать для нашего приложения для достижения этой цели, который позволит конечному пользователю определять поля FROM и REPLYTO?

  2. Мне сказали, что не все интернет-провайдеры / организации разрешат произвольные SMTP-подключения и / или если отправитель реализует запись SPF, сообщение может быть отклонено. Означает ли это, что мой предполагаемый подход не всегда работает?

  3. Есть ли какой-либо другой распространенный или более стабильный метод, который я мог бы использовать для достижения своей первоначальной цели?

Ответы [ 3 ]

1 голос
/ 24 июля 2010

1) Я был бы удивлен, если бы вы нашли общедоступный SMTP-сервер, чтобы сделать это, поскольку он просто интенсивно использовался бы как спам-ретранслятор.

2) Многие бытовые интернет-провайдеры блокируют SMTP-трафик отоставив свою сеть.Однако они делают это, блокируя порт 25, поэтому, если вы разместите свой собственный SMTP-сервер на альтернативном порту, он не будет заблокирован, за исключением самых крайних случаев.

3) см. Ниже

Я вижу два вопроса, к которым вы должны обратиться:

Получение сообщения от отправителя к вам
Предложение Конрада использовать веб-сервис является хорошим, поскольку оно дает вам больше контроляпо транспортировке сообщения к вам.Вы можете использовать любую аутентификацию, которую считаете нужной, чтобы убедиться, что лицо, отправляющее сообщение, является законным.Вы можете использовать SMTP для отправки сообщений через почтовый сервер, размещенный вами, но вам необходимо сосредоточиться на том, чтобы знать, кому разрешить отправку, а кому нет, чтобы вы не оказались спам-релеем.

Отправка сообщения от вас получателю
Вы все еще можете отправить сообщение конечному получателю через SMTP на его почтовый хост.Я бы посоветовал отправить электронное письмо с приложением from в качестве приложения (например, mailagent@myapplication.com) и указать адрес для ответа для вашего исходного отправителя.Если вы попытаетесь использовать их адрес в поле from, вы получите больше отклонений спама.

Если я понял ваше описание, сообщения будут отправляться только другим пользователям приложения?
Если это так, выможет принять маршрут веб-службы на обеих частях связи.Отправитель доставляет сообщение на ваш централизованный сервер через вызов веб-службы. Когда пользователь-получатель открывает программное обеспечение, он проверяет ваш сервер на наличие ожидающих сообщений.

РЕДАКТИРОВАТЬ:
Да, часть писем о назначении, я мог прочитать ее в обоих направлениях, наверное, я склонился не к тому.

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

Кроме того, исследуйте конкретные основные почтовые объекты, такие как Yahoo!и GMail за то, как взаимодействовать с ними, такие как: http://mail.google.com/support/bin/answer.py?hl=en&answer=81126
http://help.yahoo.com/l/us/yahoo/mail/postmaster/postmaster-15.html
http://help.yahoo.com/l/us/yahoo/mail/postmaster/bulkv2.html

1 голос
/ 24 июля 2010

Я не думаю, что вы можете гарантировать, что любой SMTP-сервер всегда будет доступен.например, SMTP в Gmail заблокирован в моем офисе.

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

0 голосов
/ 24 июля 2010

Я использовал что-то похожее на это для отправки электронной почты без необходимости использовать smtp.YMMV

...