PHP - 发送HTML电子邮件后变量中的未知字符

时间:2011-05-12 08:11:13

标签: php html email

我正在phpNuke开发一个用户注册模块,我遇到了一个问题,我不知道这是什么。

该功能的用途是什么:

  1. 从用户注册表中获取所有数据,将其放入临时用户的MySql表中。
  2. 此时,html电子邮件将发送给网站管理员进行审批。
  3. 管理员通过html电子邮件中的链接批准后,会向用户发送一封电子邮件,告知他们帐户已获批准。
  4. 
        $check_num = md5($user_email);

    if($creditcard == "1"){
                $finishlink = "http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=$check_num&adminApproval=2";
            }else{
                $finishlink = "http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=$check_num&adminApproval=1";
                $rejectlink = "http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=$check_num&adminApproval=0";
            }
    
    
    $from_admin = $adminmail;
    $admin_header = "MIME-Version: 1.0" . "\r\n";
    $admin_header .= "Content-type: text/html; charset=UTF-8" ."\r\n";
    $admin_header .= "From: $from_admin" . "\r\n";
    $admin_msg = "<html><head><title>Membership Request</title></head>"
    ."<body><b>Membership Request</b><br /><br />" 
    ."<table width=\"500\" border=\"0\">"
    ."<tr><td width=\"150\">Country/Region :</td><td width=\"350\">$region</td></tr>"
    ."<tr><td width=\"150\">Company Name :</td><td width=\"350\">$organization</td></tr>"
    ."<tr><td width=\"150\">Email Address :</td><td width=\"350\">$user_email</td></tr>"
    ."<tr><td width=\"150\">Name :</td><td width=\"350\">$fullname</td></tr>"
    ."<tr><td width=\"150\">Title :</td><td width=\"350\">$title</td></tr>"
    ."<tr><td width=\"150\">Telephone :</td><td width=\"350\">$phone</td></tr>"
    ."<tr><td width=\"150\">Referral :</td><td width=\"350\" valign=\"top\">$referral</td></tr>"
    ."<tr><td width=\"150\">Area of interest :</td><td width=\"350\">$areaOfInterest</td></tr>"
    ."<tr><td width=\"150\">Sign up for updates :</td><td width=\"350\">$newsletter</td></tr>"
    //."<tr><td width=\"150\">Activate Member :</td><td width=\"350\"><a href=\"$finishlink\">YES</a>/<a href=\"$rejectlink\">NO</a></td></tr>"
    .'<tr><td width="150">Activate Member :</td><td width="350"><a href="'.$finishlink.'">YES</a>&nbsp;<a href="'.$rejectlink.'">NO</a></td></tr>'
    ."</table></body></html>";
    $admin_subj = "Membership Request from ".ucwords($fullname).",".$region;
    mail($adminmail,$admin_subj,$admin_msg, $admin_header);  
    

    以上是发送HTML电子邮件的脚本,它在IIS环境中运行良好,但是当我将其迁移到Network Solutions上的Linux服务器时,$ finishlink在$ checksum变量中添加了“!”。这只发生在Linux环境中。

    从上面可以看出,$ finishlink和$ rejectlink几乎完全相同,最后差异是&amp; adminApproval = value。而这个“未知变量”只发生在$ finishlink中,$ rejectlink就好了。

    我的电子邮件中的错误示例, 终点链接:

    if($creditcard == "1"){
                $finishlink = "http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=$check_num&adminApproval=2";
            }else{
                $finishlink = "http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=$check_num&adminApproval=1";
                $rejectlink = "http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=$check_num&adminApproval=0";
            }
    
    
    $from_admin = $adminmail;
    $admin_header = "MIME-Version: 1.0" . "\r\n";
    $admin_header .= "Content-type: text/html; charset=UTF-8" ."\r\n";
    $admin_header .= "From: $from_admin" . "\r\n";
    $admin_msg = "<html><head><title>Membership Request</title></head>"
    ."<body><b>Membership Request</b><br /><br />" 
    ."<table width=\"500\" border=\"0\">"
    ."<tr><td width=\"150\">Country/Region :</td><td width=\"350\">$region</td></tr>"
    ."<tr><td width=\"150\">Company Name :</td><td width=\"350\">$organization</td></tr>"
    ."<tr><td width=\"150\">Email Address :</td><td width=\"350\">$user_email</td></tr>"
    ."<tr><td width=\"150\">Name :</td><td width=\"350\">$fullname</td></tr>"
    ."<tr><td width=\"150\">Title :</td><td width=\"350\">$title</td></tr>"
    ."<tr><td width=\"150\">Telephone :</td><td width=\"350\">$phone</td></tr>"
    ."<tr><td width=\"150\">Referral :</td><td width=\"350\" valign=\"top\">$referral</td></tr>"
    ."<tr><td width=\"150\">Area of interest :</td><td width=\"350\">$areaOfInterest</td></tr>"
    ."<tr><td width=\"150\">Sign up for updates :</td><td width=\"350\">$newsletter</td></tr>"
    //."<tr><td width=\"150\">Activate Member :</td><td width=\"350\"><a href=\"$finishlink\">YES</a>/<a href=\"$rejectlink\">NO</a></td></tr>"
    .'<tr><td width="150">Activate Member :</td><td width="350"><a href="'.$finishlink.'">YES</a>&nbsp;<a href="'.$rejectlink.'">NO</a></td></tr>'
    ."</table></body></html>";
    $admin_subj = "Membership Request from ".ucwords($fullname).",".$region;
    mail($adminmail,$admin_subj,$admin_msg, $admin_header);  
    

    rejectlink:

    
    http://$siteurl/modules.php?name=$module_name&op=activate&username=$username&check_num=f17cde8f32a68d06af5301!  bda67653e4&adminApproval=1">YES
    

    如果有人能够指出我正确的方向,我将非常感激!我花了更多时间在这上面。

1 个答案:

答案 0 :(得分:1)

从我可以告诉您的代码看起来很好,并且没有理由这样做。

通用的答案是简化代码,直到达到失败的确切位置。 如果您不通过电子邮件发送正文,只是将其显示在浏览器中或保存到文件中,这是正确的吗?