Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Como colocar uma imagem no e-mail?

Olá, tudo bem? Eu gostaria de colocar uma logo no componente header do template basico do Laravel 7. Meu componente header:

<tr>
    <td class="header">
        <a href="#">
                <img src="{{ asset('path/logo.png') }}" class="logo" alt="Laravel Logo">
                {{ $slot }}
        </a>
    </td>
</tr>

Seguindo a documentação https://laravel.com/docs/7.x/mail#inline-attachments tentei usar a variavel $message. Mas aparece o erro de que a variável não foi encontrada.

5 respostas

Olá, Rafael. Você está falando de adicionar uma imagem anexada no e-mail. É isso mesmo que você quer? Se sim, me manda o print do erro ao enviar o e-mail?

Olá, Vinicius. Não, estou falando em colocar a imagem dentro da mensagem do e-mail, mais especificamente uma logo ao lado de um texto.

!erro(https://cdn1.gnarususercontent.com.br/1/1269760/2add044d-71ce-44fb-b4a6-f50a4880c6c1.png)

Segui a documentação que coloquei no inicio do tópico. Lembrando que estou usando Laravel 7. Usei a variável $message com o método embed().

Como está seu código? Como você está tentando enviar esse e-mail? Você precisa definir o e-mail como HTML. Se usar o e-mail como plain-text, não vai funcionar pois não dá pra adicionar um anexo (o que você está tentando fazer é anexar uma imagem ao e-mail).

Se quiser ter uma imagem sem precisar de anexo, basta colocar o caminho completo para ela no HTML (incluindo o domínio que seja publicamente acessível).

O build() da classe de email:

public function build()
    {
        $details = $this->details;

        $this->markdown('email.passwordReset')
            ->subject($details['assunto']);

        return $this;
    }

Estou usando os componentes do Markdown. Fiz o upload da pasta com os componentes e alterei no header para ter a logo e texto. Ja tentei fazer de duas formas: Com a variavel $message, que da o erro de '$message is undefined'.

<tr>
    <td class="header">
        <a href="#">
                <img src="{{ $message->embed(asset('landing_page_v2\img\logo.png')) }}" class="logo" alt="Laravel Logo">
                {{ $slot }}
        </a>
    </td>
</tr>

tbm tentei assim

<tr>
    <td class="header">
        <a href="#">
                <img src="{{ asset('landing_page_v2\img\logo.png') }}" class="logo" alt="Laravel Logo">
                {{ $slot }}
        </a>
    </td>
</tr>

que na vizualização aparece a imagem normal,

return new PasswordReset($details);

mas quando envio para o e-mail, não aparece a imagem, ela não carrega.

solução!

E-mails em markdown não possuem a variável $message. Só os em HTML.

Provavelmente sua chamada para a função asset está gerando o caminho relativo para a imagem (sem o domínio). Defina a variável de ambiente ASSET_URL: https://laravel.com/docs/9.x/helpers#method-asset

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software