使用PHP函数发送邮件或短信消息
随着互联网的不断发展,发送邮件或短信消息已经成为了我们日常生活的必备功能。而在PHP中,我们可以通过使用函数来实现发送邮件或短信消息的功能。
1.发送邮件消息
在PHP中,我们可以使用mail()函数来发送邮件消息。该函数的语法如下:
mail(string $to, string $subject, string $message, string $additional_headers = '', string $additional_parameters = '')
参数说明:
$to:指定收件人的邮箱地址,支持多个地址,用逗号隔开。
$subject:指定邮件主题,一般情况下应该尽量简短明了。
$message:指定邮件正文内容,可以包含HTML标记。
$additional_headers:额外的头信息,可以用来设置邮件的发件人等信息。
$additional_parameters:额外的参数信息,一般情况下不需要用到。
示例代码:
<?php
$to = 'recipient@example.com';
$subject = '测试邮件';
$message = '<h1>这是一封测试邮件</h1>';
$headers = 'From: sender@example.com' . "\r
";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r
";
if(mail($to, $subject, $message, $headers)){
echo '邮件发送成功!';
}else{
echo '邮件发送失败!';
}
?>
说明:
以上代码通过调用mail()函数,将一封HTML邮件发送给了一个指定的收件人。需要注意的是,mail()函数虽然能够发送邮件,但并不是一个完整的邮件发送程序,在实际应用中会遇到很多问题,例如发件人易被识别成垃圾邮件等。
2.发送短信消息
与邮件消息相似,我们也可以通过使用PHP中的函数来实现发送短信消息的功能。下面我们来介绍一下如何使用阿里云短信服务来发送短信消息。
(1)首先,需要先注册一个阿里云账号,并开通短信服务功能。
(2)在阿里云控制台中创建一个短信签名和短信模板,用来发送短信消息。
(3)在PHP中调用阿里云短信API接口,实现发送短信消息的功能。
示例代码:
<?php
/**
* 发送短信消息
* @param string $mobile 手机号码,多个手机号码用逗号隔开
* @param string $sign_name 短信签名名称
* @param string $template_code 短信模板CODE
* @param array $params 短信模板变量替换值数组,格式为:array('变量名1' => '变量值1', '变量名2' => '变量值2', ...)
* @return boolean 成功返回true,失败返回false
*/
function send_sms($mobile, $sign_name, $template_code, $params = array()){
$params = json_encode($params);
$params = urlencode($params);
$app_key = 'your_app_key'; // 替换为阿里云短信服务的app_key
$app_secret = 'your_app_secret'; // 替换为阿里云短信服务的app_secret
$code = ''; // 替换为接收验证码的手机号码
$url = 'https://dysmsapi.aliyuncs.com/?Action=SendSms&Format=JSON&PhoneNumbers=' . $mobile . '&SignName=' . $sign_name . '&TemplateCode=' . $template_code . '&TemplateParam=' . $params . '&RegionId=cn-hangzhou&Version=2017-05-25&AccessKeyId=' . $app_key . '&SignatureMethod=HMAC-SHA1&SignatureVersion=1.0&SignatureNonce=' . uniqid() . '&Timestamp=' . urlencode(gmdate('Y-m-d\TH:i:s\Z'));
$parameters = array(
'AccessKeyId' => $app_key,
'Action' => 'SendSms',
'Format' => 'JSON',
'PhoneNumbers' => $mobile,
'RegionId' => 'cn-hangzhou',
'SignName' => $sign_name,
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => uniqid(),
'SignatureVersion' => '1.0',
'TemplateCode' => $template_code,
'TemplateParam' => $params,
'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
'Version' => '2017-05-25'
);
ksort($parameters);
$canonicalizedQueryString = '';
foreach ($parameters as $key => $value) {
$canonicalizedQueryString .= '&' . specialUrlEncode($key) . '=' . specialUrlEncode($value);
}
$stringToSign = 'GET&%2F&' . specialUrlEncode(substr($canonicalizedQueryString, 1));
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $app_secret . '&', true));
$url .= '&Signature=' . specialUrlEncode($signature);
$result = curl_get_contents($url, 30);
$result = json_decode($result , true);
if($result['Code'] == 'OK'){
return true;
}else{
return false;
}
}
/**
* URL特殊字符编码
* @param string $str 要编码的字符串
* @return string 编码后的字符串
*/
function specialUrlEncode($str){
$str = urlencode($str);
$str = preg_replace('/\+/','%20',$str);
$str = preg_replace('/\*/','%2A',$str);
$str = preg_replace('/%7E/','~',$str);
return $str;
}
/**
* 使用CURL发送请求
* @param string $url 请求URL地址
* @param integer $timeout 请求超时时间,单位:秒
* @return mixed 请求结果数据,字符串或者false
*/
function curl_get_contents($url='', $timeout=30) {
if (!$url) return '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}
// 调用示例
$mobile = '13800138000';
$sign_name = '测试短信签名';
$template_code = 'SMS_191994520'; // 替换为自己的阿里云短信模板CODE
$params = array(
'code' => '123456'
);
if(send_sms($mobile,$sign_name,$template_code,$params)){
echo '短信发送成功!';
}else{
echo '短信发送失败!';
}
?>
说明:
以上代码通过调用阿里云短信API接口,向指定的手机号码发送了一条包含模板变量的短信消息。需要注意的是,在实际应用中还需要根据实际情况进行调整和封装,例如获取阿里云短信服务的app_key和app_secret等信息。
综上所述,通过使用PHP函数,我们可以轻松地实现发送邮件或短信消息的功能,从而为我们的应用增加更多的交互性和便捷性。当然,在实际应用中还需要遵循相关的法律法规和隐私保护规定,以确保用户信息的安全。
