Envio de email

No config:


'components' => array(

        'messages' => array(

            'class' => 'CPhpMessageSource'),

        'email' => array(

            'class' => 'ext.yii-mail.YiiMail',

            'transportType'=>'smtp', /// case sensitive!

            'transportOptions'=>array(

                'host'=>'smtp.gmail.com',

                'username'=>'zipzapduo@gmail.com',

                'password'=>'password',

                'port'=>'587',

                'encryption'=>'ssl',

            ),

        'viewPath' => 'application.views.mail',

        'logging' => true,

        'dryRun' => false,

na view:


$message = new YiiMailMessage;




                $message->setBody('My text');


                $message->setTo(array($model->email => 'My name'));

                $message->from = Yii::app()->params['adminEmail'];

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

Tenho a seguinte estrutura:

extensions\yii-mail\YiiMail.php

e o seguinte erro:

include(YiiMailMessage.php) [<a href=‘function.include’>function.include</a>]: failed to open stream: No such file or directory

Você precisa fazer o import da Class YiiMailMessage, mas aconselho que faça os tratamentos do e-mail na action e não na view.

Antes da declaração da Class, utilize:


Yii::import('ext.yii-mail.YiiMailMessage');

Agora tenho este erro:

"fsockopen() [<a href=‘function.fsockopen’>function.fsockopen</a>]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport &quot;ssl&quot; - did you forget to enable it when you configured PHP?) "

e tenho o openssl.dll activado no php.ini

zipzap,

Você vai precisar um fake sendmail.

http://glob.com.au/sendmail/

Porque é que vou precisar ?

zipzap,

Ta testando localmente ou no servidor? Se você disse openssl.dll activado no php.ini suponhamos que está testando localmente.

Ha não ser que tenha algum servidor local rodando para envio de email.

Estou a testar localmente

Ok então eu instalei o fake sendemail

Aqui vai o meu sendemail.ini


; configuration for fake sendmail


; if this file doesn't exist, sendmail.exe will look for the settings in

; the registry, under HKLM\Software\Sendmail


[sendmail]


; you must change mail.mydomain.com to your smtp server,

; or to IIS's "pickup" directory.  (generally C:\Inetpub\mailroot\Pickup)

; emails delivered via IIS's pickup directory cause sendmail to

; run quicker, but you won't get error messages back to the calling

; application.


smtp_server=smtp.gmail.com


; smtp port (normally 25)


smtp_port=587


; SMTPS (SSL) support

;   auto = use SSL for port 465, otherwise try to use TLS

;   ssl  = alway use SSL

;   tls  = always use TLS

;   none = never try to use SSL


smtp_ssl=auto


; the default domain for this server will be read from the registry

; this will be appended to email addresses when one isn't provided

; if you want to override the value in the registry, uncomment and modify


default_domain=http://localhost/StyleStore


; log smtp errors to error.log (defaults to same directory as sendmail.exe)

; uncomment to enable logging


error_logfile=error.log


; create debug log as debug.log (defaults to same directory as sendmail.exe)

; uncomment to enable debugging


;debug_logfile=debug.log


; if your smtp server requires authentication, modify the following two lines


auth_username=zipzapduo@gmail.com

auth_password=xxxxxxx


; if your smtp server uses pop3 before smtp authentication, modify the 

; following three lines.  do not enable unless it is required.


pop3_server=

pop3_username=

pop3_password=


; force the sender to always be the following email address

; this will only affect the "MAIL FROM" command, it won't modify 

; the "From: " header of the message content


force_sender=


; force the sender to always be the following email address

; this will only affect the "RCTP TO" command, it won't modify 

; the "To: " header of the message content


force_recipient=


; sendmail will use your hostname and your default_domain in the ehlo/helo

; smtp greeting.  you can manually set the ehlo/helo name if required


hostname=




alterei o caminho do php.ini


sendmail_path = ""D:\SendMail\sendmail.exe\" -t"

e agora quando tento enviar dá este erro:

fsockopen() [<a href=‘function.fsockopen’>function.fsockopen</a>]: SSL operation failed with code 1. OpenSSL Error messages:

error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Qual versão do PHP ta usando? Me parece que o OpenSSl não está ativado!

To usando o 5.3.10.

Com as seguintes extensões habilitadas:

extension=php_curl.dll

extension=php_gd2.dll

extension=php_mbstring.dll

extension=php_mysql.dll

extension=php_mysqli.dll

extension=php_openssl.dll

extension=php_pdo_mysql.dll

5.3.8

a única extensão que não tenho activada da tua lista é extension=php_curl.dll

Faz uma verificação:


echo extension_loaded('openssl') ? 'sim' : 'não';

aparece sim

Já consegui.Alterei tambem no config man.php

Resolveu? Posta a solução pra nós! ;)

Apenas pus no main.php a mesma configuração do sendemail.ini

estou a utilizar uma view porem ela não utiliza o css (main.css) do projecto.

Como fazê-lo??

É que quero pôr um header que tem uma imagem como background no div.

Obrigado.

Não é recomendado que se utilize CSS nos arquivos de e-mail, pois as classes, e os ids podem acabar conflitando com o CSS de alguns servidores de e-mail, o que eu te recomendo é que você use o atributo style nos elementos.

No meu caso estou tentando enviar email Localhost mais não estou conseguindo, fiz o teste acima e apareceu NÃO, o que faço agora???

Amigos estou precisando de uma ajuda,

Alguém sabe como consigo disparar email’s automaticamentes no YII, ou seja, por exemplo:

  • Preciso que todos os dias as 01:00 o sistema faça uma varredura no BD e selecione todas as ocorrências atrasadas e envie para os destinatários.

Como faço essa programação de envio automático, pois até agora não consegui nada. Desde já agradeço.

Opa, blz?

Cara, vc vai ter q usar cronjob (linux) ou agendador de tarefas (windows), e configurar para que todos os dias as 01:00 ele execute determinado script.

Tem umas wiki e extensões sobre isso:

http://www.yiiframework.com/wiki/492/cron-jobs-in-yii/

http://www.yiiframework.com/wiki/91/implementing-cron-jobs-with-yii/

http://www.yiiframework.com/extension/yii-crontab/

http://www.yiiframework.com/extension/yii-scheduler/

http://www.yiiframework.com/extension/runactions/