Как отправить электронное сообщение из моего приложения C #? - PullRequest
6 голосов
/ 14 декабря 2008

Это код, который я написал:

        MailMessage mail = new MailMessage("test@gmail.com", "me@myurl.com");

        mail.Subject = "This is a test!!";
        mail.Body = "testing...";

        SmtpPermission connectAccess = new SmtpPermission(SmtpAccess.Connect);
        System.Console.WriteLine("Access?  " + connectAccess.Access);

        SmtpClient client = new SmtpClient("mail.myurl.com", 2525);
        client.Send(mail);

Это не работает. Я получаю исключение в строке «client.Send (mail)», которая говорит: «Почтовый ящик недоступен. Ответ сервера был (MYLOCALCOMPUTERNAME) [МОЙ ЛОКАЛЬНЫЙ IP]: 3045 в настоящее время не разрешено передавать через».

connectAccess.Access возвращает «Connect» (я не уверен, было ли это необходимо ... Я добавил его, чтобы начать процесс устранения неполадок.)

Значит ли это, что моя локальная машина должна быть настроена каким-то образом? А когда я разверну свое приложение на машинах других людей? Должна ли там быть локальная конфигурация? Я просто пытаюсь создать ссылку типа "Отправить отзыв" из своего приложения.

(Примечание: в моем реальном приложении я использую свои настоящие адреса электронной почты как "to", так и "from", а мой smtp - это действительно мой адрес smtp в месте, где размещается мой URL / сайт)

спасибо!

-Adeena

Ответы [ 4 ]

7 голосов
/ 14 декабря 2008

@ Майкл: спасибо за ссылку. Это очень полезно.

Я думаю Я понял свою проблему. Мне нужно было добавить учетные данные для входа после того, как я создал свой «клиентский» объект. Я добавил следующую строку:

 client.Credentials = new System.Net.NetworkCredential("myloginat+myurl.com", "mypassword");

(извините - у меня есть такая привычка, что после того, как я ищу ответ в Интернете и в течение 2 часов в своих руководствах, я наконец разбираюсь и публикую вопрос, а затем через 5 минут выясняю его. :) Я думаю, что запись вопроса помогает мне больше всего на свете)

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

Спасибо! :)

-Adeena

3 голосов
/ 14 декабря 2008

Адрес получателя находится на том же хосте, что и ваш SMTP-сервер? Если нет, это объясняет ошибку ретрансляции.

Используемый вами SMTP-сервер должен быть либо конечным пунктом назначения почтового сообщения, либо первым участком почтового обмена. Например, если вы отправляете почту на адрес Yahoo с адреса Gmail, первым почтовым сервером, который увидит сообщение, должен быть ваш сервер Gmail или сервер Yahoo. Промежуточные серверы отклонят сообщение, потому что у них отключена ретрансляция (чтобы сократить спам и т. Д.).

Если это один и тот же хост, можете ли вы отправлять почту на него напрямую любым другим способом?

Попробуйте этот тест через telnet, чтобы проверить, правильно ли работает ваш SMTP-сервер: http://www.messagingtalk.org/content/470.html

0 голосов
/ 05 июня 2013
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;

namespace SendMail
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                SmtpClient client = new SmtpClient("smtp.gmail.com", 25);
                MailMessage msg = new MailMessage();

                NetworkCredential cred = new NetworkCredential("x@gmail.com", "password");
                msg.From = new MailAddress("x@gmail.com");
                msg.To.Add("y@gmail.com");
                msg.Subject = "A subject";
                msg.Body = "Hello,Raffi";

                client.Credentials = cred;
                client.EnableSsl = true;
                label1.Text = "Mail Sended Succesfully";
                client.Send(msg);


            }
            catch
            {
                label1.Text = "Error";
            }
        }



    }
}
0 голосов
/ 26 мая 2009

Проверьте ваш брандмауэр. Открыто ли сообщение 2525?

...