コマンドで作ったサービスでメールを送ろうとしています。セキュリティにいくつかの変更を加えた後、問題が発生しています。コマンドを実行するたびに、次のエラーが表示されます。
[Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException]
The security context contains no authentication token. One possible reason may be that there is no firewall configured for this URL.
エラーが発生する場所を特定しました。それは、電子メールのテンプレートをレンダリングしようとしたときです。サービスでインスタンス化されたテンプレートを使用してみました。また、コマンドからテンプレートを渡してみました
$this->getContainer()->get('templating')
しかし、それでも両方とも同じエラーが発生します。
追加情報として、1 つのコマンドだけではなく、電子メールを送信するすべてのコマンドでこのエラーが発生します。
私が使用していた機能は次のとおりです。
public function createMessage($subject, $to, $template, array $atributes, array $from = array(), $returnPath = 'dev@domain.br', $replyTo = 'no-reply@domain.com.br', $templating = null)
{
if (count($from) == 0) {
$from = array('no-reply@domain.com.br' => 'Contact');
}
if ($templating == null) {
$tpl = $this->templating->render($template, $atributes);
} else {
$tpl = $templating->render($template, $atributes);
}
$this->message = \Swift_Message::newInstance()
->setFrom($from)
->setReturnPath($returnPath)
->setReplyTo($replyTo)
->setContentType('text/html')
->setSubject($subject)
->setTo($to)
->setBody($tpl);
return $this;
}
$tpl を入力しようとすると、エラーが発生します。
私もこの方法を試しました:
$message = \Swift_Message::newInstance()
->setSubject('Você foi bloqueado no sistema')
->setFrom('contato@mysite.com.br')
->setTo($usuario->getEmail())
->setCharset('UTF-8')
->setContentType('text/html')
->setBody($this->getContainer()->get('templating')->render('MyBundle:Email:template.twig'));
$this->getContainer()->get('mailer')->send($message);
私のsecurity.yml
jms_security_extra:
secure_all_services: false
expressions: true
security:
role_hierarchy:
ROLE_ADMIN: [ROLE_USUARIO]
ROLE_USUARIO:
providers:
user_db:
entity: { class: MyNamespace\UserBundle\Entity\Usuario }
encoders:
MyNamespace\UserBundle\Entity\Usuario: plaintext
firewalls:
secured_area:
switch_user: { role: ROLE_ADMIN, parameter: _become_him }
pattern: ^/
anonymous: ~
form_login:
check_path: /login_check
login_path: /login
logout:
path: /logout
target: /login
access_control:
- { path: ^/_wdt/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/adm, roles: ROLE_ADMIN }
- { path: ^/, roles: ROLE_USUARIO }
テンプレート:
<!DOCTYPE html>
<html>
<head>
<title>
{% block title '' %}
</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table style="width: 680px; font-family: Helvetica, Arial, sans-serif; color: #575756; font-size: 16px;">
<tr>
<td style="padding: 0 70px;">
<img src="/img/email/logo.png" style="width: 160px;"/>
</td>
</tr>
<tr style="background-color: #649cb0; line-height: 7px;">
<td> </td>
</tr>
<tr>
<td style="padding: 0 70px 20px 70px;">
{% block content '' %}
</td>
</tr>
<tr style="background-color: #649cb0;">
<td style="padding: 0 70px;">
<table style="width: 100%; margin-top: 5px;">
<tr>
<td style="width: 50%; text-align: left;">
<a target="_blank">
<img src="/img/email/acessar.png" title="Acessar o sistema" alt="Acessar o sistema" />
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
上記を使用するテンプレート: {% extends 'NC8DigitalCRMBundle:Email:layout.html.twig' %}
{% block title %}Report{% endblock %}
{% block content %}
<h3 style="font-size: 20px; font-weight: normal;">Hello,</h3>
{% if qtdNaoDistribuidas > 0 %}
<h4>Problems found.</h4>
{% else %}
<h4>Everything is ok.</h4>
{% endif %}
{% endblock %}
そして、これが私のメールサービスです:
mybundle.email:
class: MyNameSpace\MyBundle\Services\SendEmail
arguments: [ "@doctrine.orm.entity_manager", "@templating", "@mailer", "@service_container" ]