//指明从哪台主机接收来的可选部分。由于每个处理过这个消息的系统都会生成这个字段,所
//以它通常包括在信封数据下。
if (!env_put2("UFLINE",foo.s)) temp_nomem();
//到空行的作用是:如果ext为"aa-bb-cc-dd",则依次把"EXT=aa-bb-cc-dd","EXT2=bb-cc-dd","EXT3=cc-dd","EXT4=dd"加入
//地址扩展
x = ext;
if (!env_put2("EXT",x)) temp_nomem();
x += str_chr(x,'-'); if (*x) ++x;
if (!env_put2("EXT2",x)) temp_nomem();
x += str_chr(x,'-'); if (*x) ++x;
if (!env_put2("EXT3",x)) temp_nomem();
x += str_chr(x,'-'); if (*x) ++x;
if (!env_put2("EXT4",x)) temp_nomem();
if (!stralloc_copys(&safeext,ext)) temp_nomem();
//将safeext中字符串转化为小写的
case_lowerb(safeext.s,safeext.len);
for (i = 0;i < safeext.len;++i)
if (safeext.s[i] == '.')
safeext.s[i] = ':;';
//例如host为202.18.236.150,则"HOST2=202.18.236","HOST3=202.18","HOST4=202",加入其中
//接收地址的域名部分
i = str_len(host);
i = byte_rchr(host,i,'.');
if (!stralloc_copyb(&foo,host,i)) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
if (!env_put2("HOST2",foo.s)) temp_nomem();
i = byte_rchr(host,i,'.');
if (!stralloc_copyb(&foo,host,i)) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
if (!env_put2("HOST3",foo.s)) temp_nomem();
i = byte_rchr(host,i,'.');
if (!stralloc_copyb(&foo,host,i)) temp_nomem();
if (!stralloc_0(&foo)) temp_nomem();
if (!env_put2("HOST4",foo.s)) temp_nomem();
flagforwardonly = 0;
qmesearch(&fd,&flagforwardonly);
if (fd == -1)/*文件没打开*/
if (*dash)
strerr_die1x(100,"Sorry, no mailbox here by that name. (#5.1.1)");
if (!stralloc_copys(&ueo,sender)) temp_nomem();
if (str_diff(sender,""))/*sender不空*/
if (str_diff(sender,"#@[]"))/*sender和"#@[]"不同*/
if (qmeox("-owner") == 0)
{
if (qmeox("-owner-default") == 0)
{
if (!stralloc_copys(&ueo,local)) temp_nomem();
if (!stralloc_cats(&ueo,"-owner-@")) temp_nomem();
if (!stralloc_cats(&ueo,host)) temp_nomem();
if (!stralloc_cats(&ueo,"-@[]")) temp_nomem();
}/*ueo为local+"-owner-@"+host+"-@[]"*/
else
{
if (!stralloc_copys(&ueo,local)) temp_nomem();
if (!stralloc_cats(&ueo,"-owner@")) temp_nomem();
if (!stralloc_cats(&ueo,host)) temp_nomem();
}/*ueo为local+"-owner@"+host*/
}
if (!stralloc_0(&ueo)) temp_nomem();
//转发的发送人地址
if (!env_put2("NEWSENDER",ueo.s)) temp_nomem();