if (!stralloc_cats(&envrecip,"@")) temp_nomem();
if (!stralloc_cats(&envrecip,host)) temp_nomem();
//将envrecip->s加'Z'拷到foo->s.
if (!stralloc_copy(&foo,&envrecip)) temp_nomem();
//#define stralloc_0(sa) stralloc_append(sa,"")
//GEN_ALLOC_append(stralloc,char,s,len,a,i,n,x,30,stralloc_readyplus,stralloc_append)
//struct stralloc{char *s;int len;int a;},len是s的长度,a是总共分配的空间。
//stralloc_ready(x,n)作用是:x没有分配空间就分配n大小空间。已分配了且空间小于n就扩大空间
//stralloc_readyplus(x,n)作用是:x没有分配空间就分配n大小空间。分配给x的空间小于x->len+n,就扩大空间
if (!stralloc_0(&foo)) temp_nomem();
//将"RECIPIENT"和foo.s结合为"RECIPIENT="+foo.s,加到environ后面。下同
//信封上接收者的地址
if (!env_put2("RECIPIENT",foo.s)) temp_nomem();
//邮件头Delivered-To部分
if (!stralloc_copys(&dtline,"Delivered-To:; ")) temp_nomem();
if (!stralloc_cat(&dtline,&envrecip)) temp_nomem();
for (i = 0;i < dtline.len;++i) if (dtline.s[i] == '\n') dtline.s[i] = '_';
if (!stralloc_cats(&dtline,"\n")) temp_nomem();
if (!stralloc_copy(&foo,&dtline)) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
if (!env_put2("DTLINE",foo.s)) temp_nomem();
if (flagdoit)
bouncexf();
//将"SENDER"和sender结合为"SENDER="+sender,加到environ后面。
// 信封上发送者地址
if (!env_put2("SENDER",sender)) temp_nomem();
//将"RPLINE"和"Return-Path:;<"+"SENDER"+sender+">\n"结合后加入environ
if (!quote2(&foo,sender)) temp_nomem();
if (!stralloc_copys(&rpline,"Return-Path:; <")) temp_nomem();
if (!stralloc_cat(&rpline,&foo)) temp_nomem();
for (i = 0;i < rpline.len;++i) if (rpline.s[i] == '\n') rpline.s[i] = '_';
if (!stralloc_cats(&rpline,">\n")) temp_nomem();
if (!stralloc_copy(&foo,&rpline)) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
//邮件头返回路径
if (!env_put2("RPLINE",foo.s)) temp_nomem();
//将"From"+*sender拷到ufline中。*sender为空,则将"From"+"MAILER-DAEMON"拷进去
if (!stralloc_copys(&ufline,"From ")) temp_nomem();
if (*sender)
{
int len; int i; char ch;
len = str_len(sender);
if (!stralloc_readyplus(&ufline,len)) temp_nomem();
for (i = 0;i < len;++i)
{
ch = sender[i];
if ((ch == ' ') || (ch == '\t') || (ch == '\n')) ch = '-';
ufline.s[ufline.len + i] = ch;
}
ufline.len += len;
}
else
if (!stralloc_cats(&ufline,"MAILER-DAEMON")) temp_nomem();
if (!stralloc_cats(&ufline," ")) temp_nomem();
//在ufline后面加上现在时间。
starttime = now();
if (!stralloc_cats(&ufline,myctime(starttime))) temp_nomem();
if (!stralloc_copy(&foo,&ufline)) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
//UUCP风格的"From"行它包含消息所参与的UUCP大宗
//路径形式的路由、最后一台接收消息的机器处理消息的时间和日期以及一