起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 181|回复: 6

邮件中的附件上传功能是如何实现的呢

[复制链接]
发表于 2009-9-3 08:53:09 | 显示全部楼层 |阅读模式
var
  SendMailExchang: TMessageExchanger;
  lMessage: TMessage;
  lAccount, FAccount: TMailAccount;
  MailSystem: TMailSystem;
  lMailContent: TMemoryStream;
  FAttachment :String;
begin
  SendMailExchang := TMessageExchanger.Create(nil);
  lMessage := TMessage.Create(nil);
  lAccount := TMailAccount.Create;
  MailSystem := TMailSystem.Create;
    try
    SendMailExchang.MessageKind := TMessageKind.mkSend;
    lAccount.SMTPHost := 'smtp.qq.com';
    lAccount.SMTPPort := 25;
    lAccount.POPHost := 'pop.qq.com';
    lAccount.POPPort := 110;
    //lAccount.MailAddress := 'xx@xx.com';
    lAccount.UserID := 'xxx';
    lAccount.Password := 'xxx';
    //lAccount.AccountID := 'xx';
    lAccount.Verify := True;
    //lAccount.VerifyAccount := 'xx@qq.com';
    //lAccount.VerifyPassword := 'xxx';
    //lAccount.DifferPOP := True;
    lMessage.From := 'xx@xx.com';  //发件人
    lMessage.SendTo := 'xxx@xx.cn';  //收件人
    lMessage.Subject := '告警提示!';             //mail tatil
    lMessage.Body.Text := '邮件测试,多多打扰请见谅!';
    lMessage.AddAttachment('C:\\test.txt');
    //lMessage.LoadFromFile('C:\\test.txt');
    lMessage.BCC :='xxx';
    lMessage.CC :='';
    lMessage.ContentFormatType := TContentFormatType.ftHTML;  // 设置正文内容格式


    if lAccount <> nil then
    begin
      lMailContent := TMemoryStream.Create;  //用于存放邮件的正文
      lMailContent.Clear;
      lMessage.SaveToStream(lMailContent);
      lMailContent.Position := 0;  //移动流的指针
      try
        if lAccount.Verify then
        begin
          if lAccount.DifferPOP then
            SendMailExchang.SMTPMessages.Add(lAccount.VerifyAccount,
              lAccount.VerifyPassword, lAccount.SMTPHost,
              lMessage.From, lMessage.SendTo, lMailContent, lAccount.SMTPPort)
          else
            SendMailExchang.SMTPMessages.Add(lAccount.UserID, lAccount.Password,
              lAccount.SMTPHost, lMessage.From, lMessage.SendTo, lMailContent,
              lAccount.SMTPPort);

              //SendMailExchang.SMTPMessages.Add(lAccount.UserID, lAccount.Password,
              //lAccount.SMTPHost, lMessage.From, 'qinlu20@163.com', lMailContent,
              //lAccount.SMTPPort);
        end
        else
          SendMailExchang.SMTPMessages.Add(lAccount.SMTPHost, lMessage.From,
            lMessage.SendTo, lMailContent, lAccount.SMTPPort);
      finally
        lMailContent.Free;
        lAccount.Free;
      end;
        SendMailExchang.Active := True;  //发送邮件
        dialogs.showmessage('邮件发送成功!');
    end;
  finally
    lMessage.Free;
    MailSystem.Free;
    SendMailExchang.Free;  //  SendMailExchang对象一定要最后释放
  end;
end;

在调用这一段代码之后,我的附件如果很小,只有几K的话,可以顺利发送,可附件稍微大一点的话,就不能接收到邮件,请问如何解决呢?
回复

使用道具 举报

发表于 2009-9-3 10:35:37 | 显示全部楼层
楼主,附件有多大就收不到邮件了。
收不到的情况下,数据库里有相应记录吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-3 11:08:45 | 显示全部楼层
超过1M就没有成功过。我这里是自定义的邮件发送,不是使用平台内部的邮件发送。
回复 支持 反对

使用道具 举报

发表于 2009-9-3 11:35:43 | 显示全部楼层
楼主,你是哪个版本?
回复 支持 反对

使用道具 举报

发表于 2009-9-3 14:41:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-3 15:29:04 | 显示全部楼层
我用的版本是:2827
邮件内容已经发送成功,几K的附件也可以发送成功了。但就是超过1M的附件就没有办法发送成功。请问如何解决?
回复 支持 反对

使用道具 举报

发表于 2009-9-3 16:07:43 | 显示全部楼层
5楼的代码在28系列中也是测试过的,没什么问题。
(28系列的话,5楼链接的SendMailExchang.SMTPMessages.Add 这个方法要去掉最后那个参数)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-17 04:58 , Processed in 0.039190 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表