使用 YII2 在邮件中发送带有按钮的操作链接

Send action links with buttons in Mail using YII2

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

以便相关人员可以通过邮件本身采取某些操作(接受或拒绝)。

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

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

我怎样才能做到这一点?

我们将不胜感激任何帮助。

提前致谢。

我的控制器代码。

 /* 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>';
    }

就像你的问题一样,我已经在我的电子邮件中发送了一个 link 用于忘记密码。这个 link 为不同的用户提供不同的功能。我正在使用 codeigniter,但它也适用于所有 php 框架。 例如

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

现在 $url 已安全加密 link。这个 url 在消息的正文部分中发送,例如

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

通过电子邮件发送。在 his/her 电子邮件中点击此 link 的用户后.. 您可以实现所有事物的反向过程,例如..

$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 代码。它将对每个人都有效。

@kumar Rakesh解释的那样加密url

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

然后你可以做两个链接接受和拒绝。

$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>";