использование core php mail() для отправки через gmail SMTP

Можно ли отправлять почту в основном php через gmail smtp без использования какого-либо внешнего класса?


person Darshita    schedule 05.04.2012    source источник
comment
Лучше спросите, зачем вам это? :)   -  person MetalFrog    schedule 05.04.2012
comment
Вам нужно будет использовать внешний класс и, вам понадобится расширение OpenSSL. Это связано с тем, что Gmail требует SSL/TLS, и вы не можете сделать это с ядром PHP.   -  person DaveRandom    schedule 05.04.2012
comment
Оба комментария неверны. Я согласен, что было бы идеально просто сказать mail() вместо включения библиотеки на 600 строк.   -  person gavanon    schedule 26.01.2015
comment
@MetalFrog Еще лучший вопрос: почему вы хотите делать что-то в мире с таким отношением. Я не могу сказать вам, как часто я посещаю форумы, чтобы найти ответы на неясные вопросы, и Самый первый ответ: ВСЕГДА кто-то вроде вас, спрашивая, почему. Почему НЕТ? Может быть, это наша работа. Может быть, это то, что мы делаем для друга. Возможно, мы просто хотим знать, возможно ли это. Почему бы вам перестать спрашивать почему, и если вы на самом деле знаете ответ, то ПОМОГИТЕ ИЗМЕНИТЬ.   -  person Ayelis    schedule 09.07.2015
comment
@Ayelis Как это часто бывает, трудно передать сарказм только через текст, хотя я надеялся, что смайлика будет достаточно - что и было в течение трех лет. Это краткий способ сказать, что есть лучшие варианты, у вас уже есть лучшее решение, просто копните немного глубже. Если вы обижаетесь на это, вы копаете недостаточно глубоко.   -  person MetalFrog    schedule 10.07.2015
comment
@Ayelis Кроме того, спрашивая кого-то, почему они хотят что-то сделать, это помогает им объяснить и точно определить, что они пытаются сделать. Много раз, объясняя другому человеку, чего я пытаюсь достичь, я открываю свои собственные поиски ясности. Это помогает сосредоточить то, что я пытаюсь выполнить, и значительно улучшает мою задачу. Если вы не желаете отвечать на такие простые вопросы о том, что вы делаете, ваше отношение явно нуждается в исправлении. Критика, модификация и другие вопросы — важный цикл обратной связи. Примите участие вместо того, чтобы злиться.   -  person MetalFrog    schedule 10.07.2015
comment
@MetalFrog Надоело читать «Почему» в качестве первого (и часто ЕДИНСТВЕННОГО) ответа на каждый проклятый вопрос в Интернете. Отвечать на простые вопросы? Мне не нужно предоставлять вам мои документы. Я просто хочу получить ответ. Если ответ на самом деле был Невозможно, то ГОВОРИТЕ, что это невозможно. Однако, если ответ «Установить SSMTP, отредактировать настройки и php.ini и использовать эту функцию электронной почты с одной строкой, проблема решена». Тебе не нужно влезать в мои дела. Я не даю вам данные для входа на мой сервер или конфиденциальную информацию о моей работе. Что на самом деле нуждается в исправлении, так это ваши манеры.   -  person Ayelis    schedule 10.07.2015
comment
@MetalFrog Простой вопрос «Почему» является открытым и бесполезным. Вместо этого, если есть такие варианты, задавайте наводящие вопросы. Вы пытаетесь отправить основную php mail() через GMail без внешних классов, потому что вам не разрешено сохранять на веб-сайте более одного файла PHP? Или потому что вы не знаете, как использовать включаемые файлы? Или вы пытаетесь использовать сервер с помощью PHP-инъекции? Если вы хотите разъяснений, постарайтесь быть ясными сами. Клянусь, если я смогу просветить ТОЛЬКО ОДНОГО ЧЕЛОВЕКА, который когда-либо спрашивал Почему? как первый ответ на технический вопрос, все это того стоит. Пусть это будет тот раз.   -  person Ayelis    schedule 10.07.2015
comment
@Ayelis Я собирался ответить только почему? но есть ограничение по минимальному количеству символов.   -  person MetalFrog    schedule 14.07.2015


Ответы (5)


Я не думаю, что это возможно, потому что вам нужно выполнить аутентификацию. Кроме того, вам нужно подключиться через сокет SSL, я не знаю, поддерживает ли это стандартная функция mail().

Если вы хотите использовать пакет Pear Mail, вы можете взглянуть в этот:

Отправка электронной почты с помощью SMTP-сервера GMail со страницы PHP

person Pierre-Olivier    schedule 05.04.2012
comment
Это вполне возможно. Пожалуйста, смотрите мой ответ. ;) - person gavanon; 26.01.2015

Об этом много недопонимания. На 100% можно отправлять электронные письма с помощью gmail с помощью простой команды PHP «mail ()». И это на 100 % просто.

Установите SSMTP:

sudo apt-get install ssmtp

Изменить файл настроек:

sudo nano /etc/ssmtp/ssmtp.conf

Внутри сделайте его похожим на этот, но со своими учетными данными:

mailhub=smtp.gmail.com:587
[email protected]
AuthPass=password
UseSTARTTLS=YES

# You can only do this if you've verified your domain with Gmail.
# If you haven't, delete, or add a # before this
hostname=yourwebsite.com

FromLineOverride=YES

Наконец, откройте файл php.ini, найдите sendmail_path и используйте это значение:

sendmail_path = /usr/sbin/ssmtp -t

Вот и все! Проверьте это на своем PHP с помощью простой функции электронной почты в одну строку:

mail('[email protected]', 'Subject', 'Message', 'From: Your name <[email protected]>');

Обновление безопасности Gmail

Теперь Gmail блокирует это по умолчанию. Вы по-прежнему можете сделать это, посетив: http://www.google.com/settings/security/lesssecureapps

Включите эту функцию ВКЛ.

person gavanon    schedule 08.06.2014
comment
что это значит: You can only do this if you've verified your domain with Gmail.? Это связано с gmail или мы можем что-то сделать, чтобы подтвердить наш домен в gmail? - person VSB; 30.08.2014
comment
Это было такое замечательное и прямое решение :) Я потратил много времени, чтобы преодолеть эту ситуацию, и, надеюсь, этот метод работал без проблем. - person VSB; 30.08.2014
comment
Спасибо за ваш отзыв! К сожалению, выбранный ответ неверен. Что касается использования проверенного домена, это применимо только в том случае, если вы хотите, чтобы адрес отправителя отличался от вашего адреса Gmail, например, если у вас есть веб-сайт и вам нужен профессиональный адрес отправителя. Но вы не можете использовать какой-либо адрес отправителя, такой как [email protected], если вы не можете доказать, что у вас уже есть доступ к этому электронному письму. Как подтвердить этот адрес электронной почты с помощью Gmail. Войдите в Gmail и в разделе "Настройки > Аккаунты" нажмите Добавить другой адрес электронной почты, которым вы владеете. Введите адрес электронной почты, и Google отправит письмо с подтверждением со ссылкой для подтверждения. - person gavanon; 30.08.2014
comment
Я не уверен, что это больше работает. Google блокирует мои попытки: › Кто-то только что пытался войти в ваш аккаунт Google из приложения, которое не соответствует современным стандартам безопасности. › Мы настоятельно рекомендуем вам использовать безопасное приложение, такое как Gmail, для доступа к вашей учетной записи. Все приложения, созданные Google, соответствуют этим стандартам безопасности. С другой стороны, использование менее безопасного приложения может сделать вашу учетную запись уязвимой. › Google предотвратил эту попытку входа, но вы должны проверить свои недавно использовавшиеся устройства. - person rooter; 23.05.2016
comment
Это все еще возможно. Gmail недавно отключил его по умолчанию и теперь требует, чтобы вы включали менее безопасные приложения. Это можно сделать здесь: google.com/settings/security/lesssecureapps. - person gavanon; 23.05.2016
comment
могу подтвердить, что это все еще работает. Я знаю, что это очень старо. но это просто потрясающе :) попытка настроить php для работы с почтой была кошмаром, и это было действительно легко/замечательно - person Frank Hu MSFT; 28.06.2020
comment
Рад слышать, @FrankHuMSFT :) - person gavanon; 08.07.2020

Это возможно, хотя вам необходимо изменить настройки php.ini, см. Руководство по PHP. Вы можете изменить настройки php.ini во время выполнения с помощью ini_set.

person mensi    schedule 05.04.2012

Если у вас есть доступ для редактирования php.ini, вы можете сделать что-то вроде этого:

[mail function]
SMTP = ssl://smtp.gmail.com
smtp_port = 465
username = [email protected]
password = myemailpassword
sendmail_from = [email protected]

В качестве альтернативы вы можете сделать:

<?php
ini_set( 'smtp_port', 465 );
//etc
person Dave Goodchild    schedule 05.04.2012
comment
Это не сработает. Gmail принимает соединение только через порт 465, который является SSL. Кроме того, я не понимаю, как вы собираетесь выполнять процесс аутентификации. - person Pierre-Olivier; 05.04.2012
comment
Добавьте да, я только что протестировал свой код, вы не можете аутентифицироваться с помощью встроенной функции mail()... вам нужно будет либо использовать сторонние параметры, такие как PEAR или PHPMailer, чтобы заставить это работать... или реализовать свои собственные с помощью fsockopen (немного утомительно). - person Dave Goodchild; 05.04.2012

вы можете сделать это с помощью библиотеки PHPmailer, в которой уже есть файл gmail.php.

просто откройте и поместите свою информацию в этот файл, вы также можете использовать аналогичный код в своем файле.

Вы должны сделать настройку в настройках своей учетной записи gmail, чтобы разрешить smtp-рассылку

person anubhav    schedule 02.12.2015
comment
OP хочет просто использовать основную функцию PHP mail(), а не какие-либо внешние библиотеки. - person FreeKrishna; 09.02.2017