问:我有此代码(这是一种表单,用于注册新用户并向他们发送电子邮件以激活他们的帐户)。
展开| 选择| 包装| 行号
<?php
if(isset($ _ POST ['submited'])){
$ msg =“”;
$ RFname = clean_text($ _ POST ['RFname']);
$ RLname = clean_text($ _ POST ['RLname']);
$ USERname = clean_text($ _ POST ['UserName']);
$ USERpassword = $ _POST ['UserPass'];
$ USERpassword2 = $ _POST ['UserPassConfirm'];
$ USERemail = $ _POST ['UserEmail'];
$ USERwebsite = $ _POST ['WebSite'];
$ hash = clean_text(md5(rand(0,1000)));
if($ USERpassword!== $ USERpassword2){
$ msg =“ <span class ='errorMessges'>确认密码不匹配</ span>”;
}
elseif($ check = $ db-> query(“从loginaccess中选择1,其中Email ='”。$ USERemail。“'”)){
if(mysqli_num_rows($ check)> 0){
$ msg =“ <span class ='errorMessges'>此电子邮件已被收取</ span>”;
}
elseif(empty($ _ SESSION ['6_letters_code'])|| strcasecmp($ _ SESSION ['6_letters_code'],$ _POST ['6_letters_code'])!= 0){
$ msg =“ <span class ='errorMessges'>人码验证无效</ span>”;
}
别的{
$ putData =“插入登录名(id,FUname,LUname,Uname,Pword,电子邮件,网站,哈希)值(”,'$ RFname','$ RLname','$ USERname','$ USERpassword',' $ USERemail','$ USERwebsite','$ hash')“;
$inputResult = $db -> query ($putData) or die ('$db->error');
if ($inputResult){
$msg = "<span class='successMessgaes'>You have been successfully registered</span>";
// Send email to our user
$to='$USERemail';
$subject ='Signup | Verification';
$message ='
Thanks for signing up!
Your account has been created, you can login with the following credentials after you have activated your account by pressing the url below.
------------------------
Username: '.$USERname.'
Password: '.$USERpassword.'
------------------------
Please click this link to activate your account:
http://www.yourwebsite.com/verify.php?email='.$USERemail.'&hash='.$hash.'
';
$headers = 'From:noreply@learning.com' . "\r\n";
mail($to, $subject, $message, $headers);
}else{
$msg = "<span class='errorMessges'>There was an error please try again later</span>";
}
}
}
}
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<table width="762" border="0" cellspacing="5" cellpadding="5">
<tr>
<td colspan="2" class="socialAndPeopleByName">Personal information</td>
<td colspan="2"><span class="socialAndPeopleByName">Account information</span></td>
</tr>
<tr>
<td width="91" class="registrationInfo"><span class="red">*</span> First name</td>
<td width="203"><label for="textfield"></label>
<span id="sprytextfield1">
<input name="RFname" type="text" class="registrationFeild" id="textfield" />
<span class="textfieldRequiredMsg"><br>
First name is required.</span></span></td>
<td width="148"><span class="red">*</span><span class="registrationInfo"> User name</span></td>
<td width="255"><span id="sprytextfield5">
<input name="UserName" type="text" class="registrationFeild" id="textfield5" />
<span class="textfieldRequiredMsg"><br>
User name is required.</span></span></td>
</tr>
<tr>
<td class="registrationInfo"><span class="red">*</span> Last name</td>
<td><span id="sprytextfield2">
<input name="RLname" type="text" class="registrationFeild" id="textfield2" />
<span class="textfieldRequiredMsg"><br>
Last name is required.</span></span></td>
<td><span class="red">*</span><span class="registrationInfo"> Password</span></td>
<td><span id="sprypassword1">
<input name="UserPass" type="password" class="registrationFeild" id="textfield7" />
<span class="passwordRequiredMsg"><br>
Password is required.</span><span class="passwordMaxCharsMsg"><br>
Password can't be more then 20 letter</span><span class="passwordMinCharsMsg"><br>
Password can't be less then 6 letter</span></span></td>
</tr>
<tr>
<td class="registrationInfo"><span class="red">*</span> Valid email</td>
<td><span id="sprytextfield3">
<input name="UserEmail" type="text" class="registrationFeild" id="textfield3" />
<br>
<span class="textfieldRequiredMsg">Valid email is required.</span><span class="textfieldInvalidFormatMsg">Invalid email format.</span></span></td>
<td><span class="red">*</span><span class="registrationInfo"> Confirm Password</span></td>
<td><span id="sprypassword2">
<input name="UserPassConfirm" type="password" class="registrationFeild" id="textfield8" />
<span class="passwordRequiredMsg"><br>
Please confirm your password</span></span></td>
</tr>
<tr>
<td class="registrationInfo">Web site</td>
<td><span id="sprytextfield4">
<input name="WebSite" type="text" class="registrationFeild" id="textfield4" />
<br>
<span class="textfieldInvalidFormatMsg">Invalid format</span></span></td>
<td><span class="registrationInfo"><span class="red">*</span> Prove you are human</span></td>
<td><img src="includes/captcha.php?rand=<?php echo rand(); ?>" align="absmiddle" id='captchaimg' /> <a href="javascript: refreshCaptcha();"><img src="http://bytes.com/images/refreshIcon.jpg" alt="Refresh" width="18" height="25" border="0" align="absmiddle" /></a> <input name="6_letters_code" type="text" class="registrationFeildSmall" id="6_letters_code" /></td>
</tr>
<tr>
<td colspan="3"><?php if(!empty($msg)) {echo $msg;} ?></td>
<td><input name="submited" type="submit" class="signUpItem" id="submited" value="" /></td>
</tr>
</table>
</form>
用户提交时,我只是不发送任何电子邮件。
我认为应该这样做,
任何想法都会在这里有所帮助。
答:(PHP 4,PHP 5,PHP 7,PHP 8)
邮件—发送邮件
描述¶
邮件 (字符串 $to ,字符串 $subject ,字符串 $message ,数组|字符串 $additional_headers= [] ,字符串 $additional_params=“” ):布尔
发送电子邮件。
参数¶
to
收件人或邮件的收件人。
该字符串的格式必须符合 »RFC 2822。一些例子是:
user@example.com
user@example.com,另一个user@example.com
用户<user@example.com>
用户<user@example.com>,另一个用户<anotheruser@example.com>
subject
要发送的电子邮件的主题。
警告
主题必须满足»RFC 2047。
message
要发送的消息。
每行应以CRLF(\ r \ n)分隔。行数不能超过70个字符。
警告
(仅限Windows)当PHP直接与SMTP服务器通信时,如果在行首发现句号,则会将其删除。要解决此问题,请用双点替换这些情况。
<?php
$text = str_replace("\n.", "\n..", $text);
?>
additional_headers (选修的)
要在电子邮件标题末尾插入的字符串或数组。
通常用于添加额外的标头(From,Cc和Bcc)。多个额外的标头应使用CRLF(\ r \ n)分隔。如果使用外部数据来构成此标头,则应对数据进行清理,以防止不必要的标头被注入。
如果传递数组,则其键为标头名称,其值为相应的标头值。
注意事项:
分别在PHP 5.4.42和5.5.27之前,additional_headers没有邮件头注入保护。因此,用户必须确保指定的标头是安全的,并且仅包含标头。即永远不要通过放置多个换行符来开始邮件正文。
注意事项:
发送邮件时,邮件必须包含From标题。可以使用 additional_headers参数设置,也可以在php.ini中设置默认值。
未能执行此操作将导致类似于的错误消息Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing。直接通过SMTP发送时,From标头也会设置 Return-Path(仅限Windows)。
注意事项:
如果未收到消息,请尝试仅使用LF(\ n)。一些Unix邮件传输代理(最著名的 »qmail)会自动将CR替换为CRLF(如果使用CRLF,则会导致CR翻倍)。这应该是不得已的方法,因为它不符合 »RFC 2822的要求。
additional_params (选修的)
该additional_params参数可用于将其他标志作为命令行选项传递给配置为发送邮件时配置为要使用的程序 sendmail_path。例如,当将sendmail与-fsendmail选项一起使用时,可用于设置信封发件人地址。
这个参数在内部由escapeshellcmd()进行转义以防止命令执行。escapeshellcmd()阻止命令执行,但允许添加其他参数。出于安全原因,建议用户清除此参数,以避免在shell命令中添加不必要的参数。
由于escapeshellcmd()是自动应用的,因此无法使用Internet RFC允许用作电子邮件地址的某些字符。 mail()不允许使用此类字符,因此在需要使用此类字符的程序中,建议使用其他发送电子邮件的方式(例如使用框架或库)。
使用此方法设置信封发件人(-f)时,应将网络服务器运行的用户作为受信任的用户添加到sendmail配置中,以防止将“ X警告”标头添加到邮件中。对于sendmail用户,此文件为/ etc / mail / trusted-users。
返回值¶
返回true是否成功接收邮件,false否则返回。
重要的是要注意,仅因为邮件已被接受送达,并不意味着邮件实际上会到达预期的目的地。