Загрузка почтового сообщения из файла и отправка через smtp - сервер.

Добавьте к проекту ссылки на dll-ки: Interop.ADODB.dll и Interop.CDO.dll

Объявите
CDO.Message msg = null;


Вот пример функции загружающей сообщение из файла (файл содержит сообщение сохраненное в любом почтовом клиенте) и отправляющей его через smtp — сервер:

private bool SendMessage(string filename)
        {
            bool result = false;
            ADODB.Stream stream = null;
            try
            {
                msg = new CDO.MessageClass();
                CDO.IConfiguration iConfg;
                stream = new ADODB.StreamClass();
                stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty);
                stream.LoadFromFile(filename);
                stream.Flush();
                msg.DataSource.OpenObject(stream, "_Stream");
                msg.DataSource.Save();
                string strSch = "http://schemas.microsoft.com/cdo/configuration/";
                iConfg = msg.Configuration;
                ADODB.Fields oFields;
                oFields = iConfg.Fields;
                ADODB.Field oField = oFields[strSch + "sendusing"];
                oField.Value = CDO.CdoSendUsing.cdoSendUsingPort;
                oField = oFields[strSch + "smtpserver"];
                oField.Value = smtp_server;
                oField = oFields[strSch + "smtpserverport"];
                oField.Value = smtp_port;
                oField = oFields[strSch + "sendusername"];
                oField.Value = smtp_user;
                oField = oFields[strSch + "sendpassword"];
                oField.Value = smtp_password;
                oField = oFields[strSch + "smtpauthenticate"];
                oField.Value = CDO.CdoProtocolsAuthentication.cdoBasic;
                oField = oFields["http://schemas.microsoft.com/exchange/outlookmessageclass"];
                oField.Value = "IPM.Note.MyCustomForm";
                oFields.Update();
                msg.Send();
                result = true;
            }
            catch (Exception e)
            {
               //
            }
            finally
            {
                stream.Close();
            }
            return result;
        }


Очень удобно и для парсинга сообщений полученных с pop3. И правильно на 100%. Например:
string To = msg.To;
  • +1
  • 13 декабря 2010, 13:32
  • admin

Комментарии (4)

RSS свернуть / развернуть
+
0
Это точно рабочий вариант? А то моя VS10 ругается — говорит, что у ADODB.StreamClass и CDO.MessageClass не определен конструктор. Скачал Interop.ADODB.dll и Interop.CDO.dll с ru.nodevice.com.
avatar

ptybn8407

  • 16 августа 2011, 17:01
+
0
100% рабочий. Но писал в 2008 Pro. Только что ради Вас накидал код в VS2010 Express. Все работает. Но надо кое-что изменить:
msg = new CDO.Message();
                CDO.IConfiguration iConfg;
                stream = new ADODB.Stream();
                stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty);
                stream.LoadFromFile("c:\\123.eml");
                stream.Flush();
avatar

admin

  • 16 августа 2011, 17:57
+
0
Т.е. использовать не класс, а тип. Не
msg = new CDO.MessageClass()

, а
msg = new CDO.Message();

. Не
stream = new ADODB.StreamClass();

, а
stream = new ADODB.Stream();

. Удачи!
avatar

admin

  • 16 августа 2011, 17:58
+
0
а как Interop.ADODB.dll и Interop.CDO.dll зарегить в WM6.5? или в проекте как на них сослаться?
avatar

intacto

  • 03 апреля 2012, 20:17

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.