XAMPP Sendmail usando a conta do Gmail

Estou tentando configurar o Sendmail através do XAMPP para enviar email. No meu sendmail.ini eu tenho estas configurações:

# Set default values for all following accounts. logfile "C:\xampp\sendmail\sendmail.log account Gmail tls on port 587 tls_certcheck off host smtp.gmail.com from myemail@gmail.com auth on user myemail06@gmail.com password mypassword account default : Gmail 

Eu criei um script de teste como este:

 $to = "testemail@btinternet.com"; $subject = "Hi!"; $body = "Hi,\n\nHow are you?"; $headers = "From: myemail06@gmail.com" . "\r\n"; if (mail($to, $subject, $body, $headers)) { echo ("Message successfully sent!"); } else { echo ("Message delivery failed..."); } 

Recebo uma mensagem para dizer que o email foi enviado mas nunca chega e nos logs eu recebo:

sendmail: Erro durante a entrega: Deve emitir um comando STARTTLS primeiro.

Alguém sabe o que a questão poderia estar aqui?

Desde já, obrigado!

Gaz

Isto é o que funcionou para mim Espero que ninguém mais vai queimar óleo para descobrir isso como eu fiz.

Aqui está o meu sendmail.ini

 [sendmail] smtp_server=smtp.gmail.com smtp_port=25 error_logfile=error.log debug_logfile=debug.log auth_username=myemail@gmail.com auth_password=yourgmailpassword force_sender=myemail@gmail.com 

php / php.ini —- basicamente comenta tudo, exceto sendmail_path & mail.add_x_header

 [mail function] ; For Win32 only. ; http://php.net/smtp ;SMTP = localhost ; http://php.net/smtp-port ;smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = postmaster@localhost ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_parameters = ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header = Off ; Log all mail() calls including the full path of the script, line #, to address and headers ;mail.log = "C:\xampp\apache\logs\php_mail.log" 

Isso funcionou para mim depois que eu atualizei os arquivos sendmail (os antigos não suportam smtp)

  • vá para http://glob.com.au/sendmail/ e pegue o último arquivo zip do sendmail
  • descompacte o desktop e copie os arquivos para a sua pasta \ xampp \ sendmail substituindo tudo o que estava lá. TUDO!
  • Agora abra o sendmail.ini e copie e cole o que eu mostrei acima (remova tudo nesse arquivo primeiro ou apenas comente tudo!)
  • NOTA: você não precisa de servidores Mercury iniciados para isso.

Eu estava fazendo um php de recuperação de senha em localhost quando eu encontrei este problema. Eu precisava enviar aos usuários a senha deles. – seu php parece okey

Ok, hoje a melhor resposta não funcionou para mim. Mas isso aconteceu:

em sendmail.ini :

 [sendmail] smtp_server=smtp.gmail.com smtp_port=587 error_logfile=error.log debug_logfile=debug.log auth_username=****@gmail.com auth_password=******* force_sender=****@gmail.com 

no php.ini:

 [mail function] sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 

Com base na porta @: http://support.google.com/mail/bin/answer.py?hl=pt_PT&answer=13287

Tudo o que eu tinha que fazer era ativar a opção “Permitir que aplicativos menos seguros acessem sua conta”. Eu acho que isso é uma alternativa para criar uma senha específica do aplicativo.

https://support.google.com/accounts/answer/6010255 para informações

https://www.google.com/settings/security/lesssecureapps para o switch

Pode valer a pena voltar a ligá-lo depois de terminar por motivos de segurança.

Estes são os requisitos mais recentes do servidor SMTP do Google:

  1. Endereço do servidor SMTP do Gmail: smtp.gmail.com
  2. Senha SMTP do Gmail: (sua senha do Gmail)
  3. Porta SMTP do Gmail (TLS): 587
  4. Porta SMTP do Gmail (SSL): 465
  5. Gmail SMTP TLS / SSL necessário: sim

Requisitos do Google para SMTP

Se você acabou de usar o SSL, fica complicado com o teste de verificação Captcha necessário, por isso, basta definir meu SSL como automático, que tentará o TLS quando o SSL falhar.
insira a descrição da imagem aqui

Apenas para adicionar as já ótimas respostas. Certifique-se de estar executando o XAMPP como administrador. Isso foi o que consertou para mim.

Há outro problema ao usar o Gmail. O Gmail agora tem segurança para que você precise gerar uma senha específica do aplicativo. Não é possível usar a senha que você tem para o seu access normal ao Gmail. Eu descobri isso tentando os exemplos acima e, em seguida, percebendo que na pasta sendmail um log de erro tinha sido gerado. No log de erros, me deparei com uma mensagem indicando isso.

Eu sei que este é um post oldish mas apenas pensei que gostaria de compartilhar o fato de que o seguinte funcionou para mim.

Atualmente, estou usando um servidor WAMP no Windows 7 ENT com Apache / 2.4.9 (Win64) PHP / 5.5.12 e MySQL 5.6.17.

Eu segui este tutorial: http://blog.techwheels.net/send-email-from-localhost-wamp-server-using-sendmail/

 THIS IS WHAT YOU SENDMAIL SHOULD LOOK LIKE [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=465 ; SMTPS (SSL) support ; auto = use SSL for port 465, otherwise try to use TLS ; ssl = always 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=mydomain.com ; 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=Your Email Here auth_password=Your Password Here ; 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=Your Email Here ; 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=smtp.gmail.com THIS IS WHAT YOU PHP.INI FILE SHOULD LOOK LIKE [mail function] ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury smtp_server=smtp.gmail.com smtp_port = 465 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = postmaster@localhost ; XAMPP IMPORTANT NOTE (1): If XAMPP is installed in a base directory with spaces (eg c:\program filesC:\xampp) fakemail and mailtodisk do not work correctly. ; XAMPP IMPORTANT NOTE (2): In this case please copy the sendmail or mailtodisk folder in your root folder (eg C:\sendmail) and use this for sendmail_path. ; XAMPP: Comment out this if you want to work with fakemail for forwarding to your mailbox (sendmail.exe in the sendmail folder) sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" ; XAMPP: Comment out this if you want to work with mailToDisk, It writes all mails in the C:\xampp\mailoutput folder ;sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe" ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of ; the 5th parameter to mail(), even in safe mode. ;mail.force_extra_parameters = ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename mail.add_x_header=Off 

a) Alterar php.ini Localize o arquivo php.ini no caminho do arquivo “[Drive Letter]: [diretório XAMPP] \ php”. eg C: \ xampp \ php \ php.ini

Procure por sendmail_path no seu arquivo php.ini e remova o ponto e vírgula “;” antes dele [o meu não tem o caminho].

 [mail function] ; For Win32 only. SMTP = smtp.gmail.com smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = [your_gmail_username]@gmail.com sendmail_path = "\"C:\xampplite\sendmail\sendmail.exe\" -t" 

b) Altere o sendmail.ini Localize o sendmail.ini no caminho do arquivo como “[Letra da Unidade]: [Diretório do XAMPP] \ sendmail” ex: C: \ xampp \ sendmail \ sendmail.ini

Comente os conteúdos “Mercury” e “Um exemplo de serviço de correio grátis”, conforme mostrado abaixo:

  # Mercury 
#account Mercury
#host localhost
#from postmaster@localhost
#auth off
# A freemail service example
#account Hotmail
#tls on
#tls_certcheck off
#host smtp.live .com
#from [exampleuser]@hotmail.com
#auth on
#user [exampleuser]@hotmail .com
#password [examplepassword]

c. Adicione a conta do Gmail.

Exemplo:

 account Gmail tls on tls_certcheck off host smtp.gmail.com from [your_gmail_username]@gmail.com auth on account default : Gmail 

d. Reinicie o Apache Server


Eu não usei o Gmail. Eu usei minha conta de hospedagem. Se você fizer isso, verifique se as configurações de SMTP estão corretas. O meu era mail.abc.com e não smtp.gmail.com. Este código é de 2 sites. Você precisa alterar os dois arquivos. Eu tenho que trabalhar no Xampp 1.73 rodando em uma checkbox win200sp4. Todas as configurações padrão, exceto para esses dois arquivos. php.ini e sendmail.ini