代码片段:procedure TForm1.N3Click(Sender: TObject);  //发送附件菜单
var
  nMsg:TIdMessage;
  nBody:TStringList;
begin
  nMsg := TIdMessage.Create(nil); //生成一个对象TIdMessage
  nBody := TStringList.Create;
  nMsg.Encoding := meMIME;  //nmsg编码
  nMsg.ContentType := 'multipart/mixed';
  nMsg.CharSet := 'gbk';
  nMsg.Headers.Values['Subject']:='mytest'; //主题
  nMsg.Headers.Values['from']:='myself'; //发送人
  with TIdText.Create(nMsg.MessageParts, nil) do begin //此处建立邮件第一部分 文本格式
      Body.Text := 'HTML goes here';
      Headers.Add('Content-Type: text/html; charset=gbk');
      Headers.Add('Content-Transfer-Encoding: 7bit');
      ContentType := 'text/plain';
      ContentTransfer := '7Bit';
  end;
  with TIdAttachment.Create(nMsg.MessageParts, 'c:\1.txt') do begin  //此处插入附近件
      Headers.LoadFromFile('c:\1.txt');
      ContentDisposition :='attachment';
      ContentType := 'Text';
      ContentTransfer := 'base64';
      FileName := '1.txt';
      StoredPathName:='C:\1.txt';
 end;   nMsg.GenerateHeader;//生成头
  //下面是我邮件未发送前的一个测试
    nMsg.MessageParts.CountParts;
  ShowMessage(IntToStr(nMsg.MessageParts.Count));
  if nMsg.MessageParts.Items[0] is TIdAttachment then
  begin
    with nMsg.MessageParts.Items[0] as TIdAttachment do
    begin
      SaveToFile('D:\1.jpg'); //这里确实存到了D盘,证明该邮件确实包含了这个附近件
    end;
  end;
  IdIMAP41.AppendMsg('doc',nMsg,[mfFlagged]);//此处发送
end;这样发送了后,打开WebMail,邮件是有的,但是邮件没有附近件,所以在此请教各位前辈

解决方案 »

  1.   

    ContentType := 'Text';
    换成
    ContentType   := 'application/octet-stream';
      

  2.   

     with TIdAttachment.Create(nMsg.MessageParts, 'c:\1.txt') do begin  //此处插入附近件
         
    ExtraHeaders.Values['Content-ID'] := '<自已加>'
    ContentType   := 'application/octet-stream'; 
    FileName := 'c:\1.txt';
    DisplayName:= '1.txt'          ;
      end;这样加附件我是成功的
      

  3.   

    fengemail8同学
    我按你的方法试了,还是一样,能不能帮看下其它代码是否有错误的地方
      

  4.   

    为什么要用TIDimap4发?其他我也看不出问题
    我用TIDpop3发的,都可以成功,
      

  5.   

    TidIMAP4要灵活些,对邮件的处理都会保存到服务器中,这也是上级的要求,没办法
      

  6.   

    Antifreeze怎么用,说详细一点么
      

  7.   

    indy9 indy misc 面板上有的,拖到窗口上,IdAntiFreeze1.OnlyWhenIdle:=False;这样就OK了