使用YII2向Mail中的按钮发送操作链接

时间:2016-08-11 04:48:11

标签: email yii2 yii2-advanced-app yii-extensions

我想以这种邮件格式放置操作按钮使用Yii2 ..

因此,相关人员可以通过邮件本身采取某些行动(接受或拒绝)。

有没有办法发送加密密钥或其他任何东西,以便特定的用户可以自己使用邮件执行操作。?

截至目前,我只能发送普通文本正文的邮件,我想发送带有此按钮的特定操作链接。

我怎样才能实现这个目标?

任何帮助都会受到高度关注。

先谢谢。

我的控制器代码。

 /* Sending  Mail Function */

    public function Sendemail($request, $receiver, $subject, $email_body) {
        $empmodel = Employee::find()->where('EmployeeNo = "' . $request->createdby . '" ')->all();

        $data = ServreqItems::find()->where('srno=' . $request->srno)->all();
        $content = "<html><body>";
        $content .= "<table align='center' width='70%' bgcolor='#e0e0e0' cellpadding='0' cellspacing='0' border='0'>";
        $content .= "<tr><td>";
        $content .= "<table align='center' width='100%'  cellpadding='0' cellspacing='0' style='border:dashed #FFA500 2px; max-width:650px; background-color:#fff; font-family:Verdana, Geneva, sans-serif;'>";
        $content .= "<thead>
                        <tr height='80'>
                              <th colspan='4' style='background-color:#f5f5f5; border-bottom:solid 1px #bdbdbd; font-family:Verdana, Geneva, sans-serif; color:#333; font-size:24px;' >" . $request->FormsName . "&nbsp;Details</th>
                        </tr>
                    </thead>";

        $content .= "<tbody>
                    <tr align='center' height='10' style='background-color:#FFA500; font-family:Verdana, Geneva, sans-serif;'></tr>";

        $empmdl = Employee::find()->where('EmployeeNo = "' . Yii::$app->session['username'] . '" ')->all();

        for ($e = 0; $e < count($empmdl); $e++) {
            $content.= "<tr>
                        <td colspan='4' style='padding:15px;'>
                        <p style='font-size:20px;'>Hi' " . $empmdl[$e]->EmployeeName . " !!! " . $email_body . "</p>
                    <hr />";
        }

        for ($i = 0; $i < count($data); $i++) {
            $content.= '<tr><td style="padding-left:15px;padding-bottom:15px;">' . $data[$i]->fid->filable . '</td> <td style="padding-right:255px;"> : ' . $data[$i]->fivalue . '</td></tr>';
        }

        $content .= "<tr height='25'>
                        <td colspan='4' align='center' style='background-color:#f5f5f5; border-top:dashed #FFA500 2px; font-size:12px; '>
                        </td>
                    </tr>
                    </tbody>";

        $content .= "</table>";
        $content .= "</td></tr>";
        $content .= "</table>";
        $content .= "</body></html>";

        $sender = 'test@abc.in';
        $message = Yii::$app
            ->mail
            ->compose()
            ->setFrom($sender)
            ->setTo($receiver)
            ->setSubject($subject)
            ->setHtmlBody($content, ' text/html')
        ;

        Yii::$app->mail->getTransport()->start();
        Yii::$app->mail->send($message);
        Yii::$app->mail->getTransport()->stop();

        echo '<script>alert("Email Sent Successfuly")</script>';
    }

2 个答案:

答案 0 :(得分:5)

加密网址,如@kumar Rakesh解释

$id = $emp_id;
 $static_key = "afvsdsdjkldfoiuy4uiskahkhsajbjksasdasdgf43gdsddsf";
 $ids = $id . "_" . $static_key;
 $b_id = base64_encode($ids);

然后你可以为Accept和Decline建立两个链接。

$url1 = base_url('Class_name/action_name/') . "/?id=" . $b_id."&action=accept";
$url2 = base_url('Class_name/action_name/') . "/?id=" . $b_id."&action=reject";

在你的Sendemail功能中执行此操作:

$content .= "<p><a target='_blank' href='" . $url1 . "'>Accept</a></p>";
$content .= "<p><a target='_blank' href='" . $url2 . "'>Reject</a></p>";

答案 1 :(得分:3)

与您的问题一样,我在我的电子邮件中发送了一个忘记密码的链接。此链接适用于不同用户的不同功能。我正在使用codeigniter,但它也适用于所有PHP框架。 e.g。

 $id = $emp_id;
 $static_key = "afvsdsdjkldfoiuy4uiskahkhsajbjksasdasdgf43gdsddsf";
 $ids = $id . "_" . $static_key;
 $b_id = base64_encode($ids);
 $url = base_url('Access/newpassword/') . "/?id=" . $b_id;

现在$ url是安全的加密链接。并且这个URL发送消息的正文部分,例如

  echo "<p><a target='_blank' href='" . $url . "'>Change Password</a></p>";

通过电子邮件发送。在他/她的电子邮件中点击此链接的用户后...你可以实现所有事情的逆转过程,例如..

$ids = $this->input->get('id');
$urlData = array('ids'=>$ids);
$iddecoded = base64_decode($ids);
$idsalt = explode('_', $iddecoded);
$id = $idsalt[0];
$salt = $idsalt[1];

现在$ id是雇员ID ..试试这个PHP代码。它对每个人都很好。