欢迎访问宙启技术站
智能推送

使用PHP函数发送邮件或短信消息

发布时间:2023-06-13 05:09:18

随着互联网的不断发展,发送邮件或短信消息已经成为了我们日常生活的必备功能。而在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函数,我们可以轻松地实现发送邮件或短信消息的功能,从而为我们的应用增加更多的交互性和便捷性。当然,在实际应用中还需要遵循相关的法律法规和隐私保护规定,以确保用户信息的安全。