短信与邮件发送

本文详细介绍如何使用阿里云短信服务及Laravel框架发送短信和邮件验证码,包括配置环境、编写代码、处理响应等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 短信发送

可以使用各大平台的短信服务,如(阿里云,腾讯云)这里以阿里云为例

具体步骤查看开发者指南

下载好demo文件后,修改api_demo/SmsDemo.php文件

public static function getAcsClient() {
        
        $product = "Dysmsapi"; //产品名称:云通信短信服务API产品,开发者无需替换
         
        $domain = "dysmsapi.aliyuncs.com";//产品域名,开发者无需替换
         
        $accessKeyId = "LTAINVyp2WHc65V6"; // AccessKeyId 此处需要替换成开发者自己的AK
         
        $accessKeySecret = "e9yjbGm0DSaX67rA2voeVLNaBlNbgq"; // AccessKeySecret此处需要替换成开发者自己
 
         
        $region = "cn-hangzhou";// 暂时不支持多Region
 
         
        $endPointName = "cn-hangzhou";// 服务结点
 
        //...
         
        return static::$acsClient;
    }

发送短信方法 sendSms()

public static function sendSms() {
         
        $request = new SendSmsRequest();// 初始化SendSmsRequest实例用于设置发送短信的参数
 
         
        //$request->setProtocol("https");//可选-启用https协议
 
         
        $request->setPhoneNumbers("{$_POST['number']}"); // 必填,设置短信接收号码
 
        // 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
         
        $request->setSignName("正能量传递"); //换成自己的签名名称
 
        // 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
         
        $request->setTemplateCode("SMS_149386098");//换成自己的签名名称模板CODE
 
        // 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
         
        $request->setTemplateParam(json_encode(array(  // 短信模板中字段的值
         
            "code"=>SmsDemo::sexNum(),       //六位随机验证码 sexNum()是自己写的生成验证码的函数
             
            "product"=>"dsd"
             
        ), JSON_UNESCAPED_UNICODE));
 
         
        $request->setOutId("yourOutId"); // 可选,设置流水号
         
        $request->setSmsUpExtendCode("1234567");// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
 
         
        $acsResponse = static::getAcsClient()->getAcsResponse($request);// 发起访问请求
        // return $acsResponse;
         
        if($acsResponse->Code=='OK'){
         
            $_SESSION['code'] = json_decode($request->getTemplateParam(),true)['code'];// 生成session 用于服务端验证
             
            echo $request->getTemplateParam(); //json字符串 包含验证码 可以不用返回
             
             
        }elseif($acsResponse->Code=='isv.MOBILE_NUMBER_ILLEGAL'){
         
            echo "-1";   //用于ajax回调 手机号格式出错
             
        }elseif($acsResponse->Code=='isv.BUSINESS_LIMIT_CONTROL'){
         
            echo "-2";   //用于ajax回调 超过限制 一个手机号一天条数
             
        }else{
         
            echo "-3";   //用于ajax回调  其它错误
             
        };
    }
     
// 生成验证码
 
public static function sexNum() {
 
        $_num = '';
         
        for($i=0;$i<6;$i++){
         
            $_num .= mt_rand(0,9);
             
        }
         
        return $_num;
         
   }

前端ajax调用

$.ajax({
                    headers: {
                     
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                         
                    },
                     
                    dataType: 'json',
                     
                    type:'POST',
                     
                    url:'{{url::asset("message/api_demo/SmsDemo.php")}}',// 这里填上面的地址
                     
                    data:{
                     
                        number:$('#phone').val(),  //手机号
                         
                    },
                    success:function(text){
                     
                        switch(text){
                         
                            case '-1':
                             
                                alert('手机号格式出错');
                                 
                                break;
                                 
                            case '-2':
                             
                                alert('超过限制');
                                 
                                break;
                                 
                            case '-3':
                             
                                alert('其他错误');
                                 
                                break;
                                 
                            default:
                             
                            // text.code {"code":"595266","product":"dsd"}
                             
                            //    得到手机验证码
                        }
                    },
                })

只要在注册的时候判断提交的验证码和session值是否相同就可以了

二 邮件发送

laravel邮件发送

先开启邮箱的pop3和smtp服务(略)

找到.env文件

MAIL_DRIVER = smtp
 
MAIL_HOST = smtp.qq.com  // 这里是qq邮箱
 
MAIL_PORT = 465
 
MAIL_USERNAME = 1569526@qq.com
 
MAIL_PASSWORD = feyfteluhchd   
 
MAIL_ENCRYPTION = ssl

1 发送纯文本

public function sendEmail(Request $request){
 
        if($request->ajax()){
         
            $email = $request->input('email');  // 这些是接收的要发送的邮箱
            
            $emailArr = [1,2,3,4,5,6,7,8,9,0]; // 验证码设计6位验证码
             
            $num = '';
             
            for($i = 0;$i<6;$i++){
             
                $num .= array_rand($emailArr);
                 
            }
             
            $flag = Mail::raw('您的短信验证码是 '.$num.' 请及时处理',function($message) use ($email){
             
                $message->from('1563999@qq.com','邮件名称'); // 这里填写发送人邮箱和邮件名称
                 
                $message->subject('邮件主题');
                 
                $message->to($email);
                 
            });
             
            if($flag){ 
                
                Session::set('email',$num); // 生成session 用于以后判断用户填写的邮箱验证码是否正确
                 
                return response()->json(array('code'=>1,'msg'=>'邮件发送成功,请注意查收!'));
                 
            }else{ 
             
                 return response()->json(array('code'=>-1,'msg'=>'发送邮件失败,请重试!'));
                  
            } 
 
        }
    }

2 发送html文件

public function sendEmail(Request $request){
 
        if($request->ajax()){
         
            $email = $request->input('email');  // 要发送的邮箱
            
            $emailArr = [1,2,3,4,5,6,7,8,9,0];  // 验证码设计
             
            $num = '';
             
            for($i = 0;$i<6;$i++){
             
                $num .= array_rand($emailArr);
                 
            }
             
            // 第一个参数是模板地址(设置好路由)
             
            $flag = Mail::send('account.test',['email'=>$email,'num'=>$num],function($message) use ($email){  
             
                 $from = '1563999@qq.com';  // 发送人邮箱
                  
                 $name = '邮件名称';
                  
                 $message->from($from,$name);
                  
                 $message->to($email)->subject('邮箱验证码');  // $email 要发送的邮箱
                  
             }); 
             
            if($flag){ 
                 
                Session::set('email',$num);// 生成session 用于以后判断用户填写的邮箱验证码是否正确
                 
                return response()->json(array('code'=>1,'msg'=>'邮件发送成功,请注意查收!'));
                 
            }else{ 
             
                 return response()->json(array('code'=>-1,'msg'=>'发送邮件失败,请重试!'));
                  
            } 
 
        }
    }
     
// 路由
  
Route::any('account/test','AccountController@test');
 
test.blade.php
 
<p style="text-align: center;">您的邮箱验证码是 <span style="color: red;">{{$num}} </span>,请及时填写</p>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值