Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Ошибка отправки письма


Автор: popapo 19.8.2009, 12:46
На этом форуме уже спрашивали как на 2009 послать письмо с прилепрлинным файлом, но у меня не получаеться даже отправить.

Код

 if(TrueMail == true)
   {

            TIniFile *ini2;
            ini2 = new TIniFile(ChangeFileExt(ExtractFilePath(Application->ExeName)+"mail.cry", ".cry" ));
    IdSMTP1->AuthType = satDefault;
    IdSMTP1->Host     = ini2->ReadString("Mail","SMTP","");
    IdSMTP1->Port     = 25;
    IdSMTP1->Username = ini2->ReadString("Mail","Login","");
    IdSMTP1->Password = ini2->ReadString("Mail","Password","");
    delete ini2;

    IdMessage1->Clear();

    IdMessage1->CharSet                    = "windows-1251";
    IdMessage1->Recipients->EMailAddresses = "*****@mail.ru";        //EMail- Кому
    IdMessage1->From->Name                 = sEdit1->Text;                //От кого - будет в списке писем "от кого"
    IdMessage1->From->Address              = mail;        //EMail-От кого;
    IdMessage1->Subject                    = sEdit2->Text;    //Тема письма
    IdMessage1->Body->Text                 = sRichEdit1->Text;

    // аттач
    TIdAttachment *pAttach;
    TStringList *pHead = new TStringList;
    IdMessage1->DoCreateAttachment(pHead, pAttach);
    pAttach->FileName                             = ExtractFileName(sFilenameEdit1->Dialog->FileName);
    ((TIdAttachmentFile*)pAttach)->StoredPathName = sFilenameEdit1->Dialog->FileName;


   if(!IdSMTP1->Connected())
    IdSMTP1->Connect();
     try
     {
     if(IdSMTP1->Connected())
     {
    IdSMTP1->Send(IdMessage1);
    ShowMessage("Письмо отправлено успешно");
            sButton1->Enabled = false;
    Timer1->Enabled = true;
     }
    }
    catch(Exception &e)
    {
    ShowMessage("Error "+e.Message);
       }
    IdSMTP1->Disconnect();
    IdSMTP1->Host     = "";
    IdSMTP1->Port     = 25;
    IdSMTP1->Username = "";
    IdSMTP1->Password = "";

    }
         else
         ShowMessage("Incorrect mail");
     }

   }


Если делать без куска который отвечает за отправку файла то все нормально, но если с ним, то при нажатии на кнопку программа сообщает об ошибке (появляеться окно с пустым сообщением и красным крестиком)

И ещё одна проблема, ни как не хочет показывать русский текст в письме, IdMessage1->CharSet = "windows-1251" - не помогает.

Автор: Anikmar 19.8.2009, 17:38
Нет под рукой хелпа, на вскидку в этом участке кода все правильно?
Код

// аттач
    TIdAttachment *pAttach;
...
    IdMessage1->DoCreateAttachment(pHead, pAttach);
    pAttach->FileName                             = ExtractFileName(sFilenameEdit1->Dialog->FileName);


Я не увидел где собственно создается объект pAttach? 
Он в метод IdMessage1->DoCreateAttachment(pHead, pAttach); передается по по ссылке и создается там?

Автор: popapo 19.8.2009, 21:53
Ой действительно, я просто тупо скопировал всё, а как правильно?

Код

    TIdAttachment *pAttach = new TIdAttachmentFile(IdMessage1->MessageParts, sFilenameEdit1->Dialog->FileName);
    TStringList *pHead = new TStringList;
    pAttach->FileName                             = ExtractFileName(sFilenameEdit1->Dialog->FileName);
    ((TIdAttachmentFile*)pAttach)->StoredPathName = sFilenameEdit1->Dialog->FileName;
    IdMessage1->DoCreateAttachment(pHead, pAttach)


таже самая фигня,  если вместо new TIdAttachmentFile просто new TIdAttachment то ошибка компиляции, если чесно, я ничего в этом не понимаю...мне 14 лет)

Автор: Anikmar 20.8.2009, 07:22
Гляньте http://forum.vingrad.ru/index.php?showtopic=259263&view=findpost&p=1868344, по-моему весьма доходчиво и лаконично

Автор: popapo 20.8.2009, 11:23
Код

new TIdAttachmentFile(IdMessage1->MessageParts,sFilenameEdit1->Dialog->FileName);


Работает, проблема была из за того что я записывал напрямую из ини файлов в IdSMTP1 данные, если делать через переменные то все работает почему то.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)