smtp发送邮件记得结尾发送"\r\n.\r\n"

前段时间老板安排我修复一个邮件服务器后台C程序的bug,这个功能是邮件强制发送功能,从邮件管理后台将垃圾邮件发送出去。

因为服务器是debian系统,所以我用dbg配合日志大致跟踪后,追踪到了读取邮件文件后在while循环中使用send发送出去,代码如下:

  numofreads = 0;
  //fd为邮件文件指针,读到buf内,大小为MAXBUFSIZE
  while((n = read(fd, buf, MAXBUFSIZE)) > 0){ numofreads++;    //下面开始发送,不管走哪个if判断,都是使用send循环发送buf中的内容 if(spaminessbuf == NULL || numofreads != 1){ send(psd, buf, n, 0); } else { p1 = &buf[0]; p2 = strstr(p1, "\r\n\r\n"); if(p2){ send(psd, buf, p2-p1+2, 0); send(psd, spaminessbuf, strlen(spaminessbuf), 0); send(psd, p2, n-(p2-p1), 0); } else { send(psd, buf, n, 0); } } }  close(fd);

按理说这段程序是没有问题的,但是有例外情况。

我们知道smtp发送结尾是需要“空行.空行”这种格式,这段程序默认认为fd指向的邮件文件末尾有这个结束格式,但是遗憾的是公司的邮件文件生成程序并没有将这个”空行.空行“写到文件中,所以smpt服务器一直等待,一直等到最后超时导致无法发送成功。最后我的解决办法是在最后的"close(fd);"前面加上一段发送smtp结束格式的代码即可。代码如下:

  numofreads = 0;

   while((n = read(fd, buf, MAXBUFSIZE)) > 0){
      numofreads++;

      if(spaminessbuf == NULL || numofreads != 1){
         send(psd, buf, n, 0);
      } else {
         p1 = &buf[0];
         p2 = strstr(p1, "\r\n\r\n");
         if(p2){
            send(psd, buf, p2-p1+2, 0);
            send(psd, spaminessbuf, strlen(spaminessbuf), 0);
            send(psd, p2, n-(p2-p1), 0);
         } else {
            send(psd, buf, n, 0);
         }
      }
   }   
   send(psd,"\r\n.\r\n",strlen("\r\n.\r\n"),0);  
   close(fd);

 

转载于:https://www.cnblogs.com/liuxuzzz/p/5210671.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabVIEW是一个功能强大的可视化编程语言,也可以用于发送电子邮件。使用LabVIEW发送电子邮件需要借助SMTP(Simple Mail Transfer Protocol)协议进行传输。以下是使用LabVIEW进行SMTP发送邮件的步骤: 1. 首先,需要在LabVIEW中创建一个VI(虚拟仪器),用于发送电子邮件。打开LabVIEW软件并创建一个新的VI。 2. 在Block Diagram窗口中,点击右键,选择"SMTP VIs",然后选择"Create SMTP Connection",创建一个SMTP连接。 3. 连接到SMTP服务器。在"Create SMTP Connection" VIs的输入端输入SMTP服务器的地址和端口号。如果SMTP服务器需要使用身份验证,则还需要提供用户名和密码。 4. 创建邮件消息体。点击右键,选择"SMTP VIs",然后选择"Create Message",创建一个新的邮件消息。 5. 设置邮件的详细信息。在"Create Message" VIs的输入端输入邮件的发件人、收件人、主题和内容等详细信息。 6. 发送邮件。点击右键,选择"SMTP VIs",然后选择"Send Message",发送邮件。 7. 如果需要,可以在发送邮件之后关闭SMTP连接。点击右键,选择"SMTP VIs",然后选择"Close SMTP Connection",关闭SMTP连接。 通过以上步骤,您可以使用LabVIEW发送电子邮件。请注意,发送邮件的成功与否可能会受到SMTP服务器的限制和网络状况的影响。如果遇到问题,您可以检查SMTP服务器的设置和LabVIEW程序中的配置是否正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值