Используйте функцию callback()
внутри успеха foo()
. Попробуйте таким образом. Это просто и легко понять. & nbsp;
var lat = "";
var lon = "";
function callback(data) {
lat = data.lat;
lon = data.lon;
}
function getLoc() {
var url = "http://ip-api.com/json"
$.getJSON(url, function(data) {
callback(data);
});
}
getLoc();
Когда вы отправляете электронное письмо через сервер, для которого требуется SMTP Auth, вам действительно нужно указать его, а также указать хост, имя пользователя и пароль (и, возможно, порт, если он не является стандартным - 25).
Например, я обычно использую PHPMailer с похожими настройками:
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->Host = "mail.example.com"; // SMTP server example
$mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = 25; // set the SMTP port for the GMAIL server
$mail->Username = "username"; // SMTP account username example
$mail->Password = "password"; // SMTP account password example
Здесь вы можете найти больше о PHPMailer: https://github.com/ PHPMailer / PHPMailer
Вот способ сделать это с помощью PHP PEAR
// Pear Mail Library
require_once "Mail.php";
$from = '<your@mail.com>'; //change this to your email address
$to = '<someone@mail.com>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject
);
$smtp = Mail::factory('smtp', array(
'host' => 'ssl://smtp.gmail.com',
'port' => '465',
'auth' => true,
'username' => 'your@gmail.com', //your gmail account
'password' => 'snip' // your password
));
// Send the mail
$mail = $smtp->send($to, $headers, $body);
Если вы используете gmail smtp, не забудьте включить SMTP в свою учетную запись gmail, в настройках
<?php
ini_set("SMTP", "aspmx.l.google.com");
ini_set("sendmail_from", "YOURMAIL@gmail.com");
$message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com";
$headers = "From: YOURMAIL@gmail.com";
mail("Sending@provider.com", "Testing", $message, $headers);
echo "Check your email now....<BR/>";
?>
ИЛИ
Проблема в том, что функция PHP mail()
имеет очень ограниченную функциональность. Существует несколько способов отправки почты с PHP.
mail()
использует SMTP-сервер в вашей системе. В Windows можно использовать как минимум два сервера: hMailServer и xmail . Я провел несколько часов, настраивая и поднимая их. На мой взгляд, первый из них проще. В настоящий момент hMailServer работает с Windows 7 x64. mail()
использует SMTP-сервер на удаленной или виртуальной машине с Linux. Конечно, реальная почтовая служба, такая как Gmail, не позволяет прямое соединение без каких-либо учетных данных или ключей. Вы можете настроить виртуальную машину или использовать ее в локальной сети. Большинство дистрибутивов Linux имеют почтовый сервер из коробки. Настройте его и получайте удовольствие. Я использую exim4 по умолчанию на Debian 7, который прослушивает его интерфейс LAN. Независимо от того, какой ваш выбор, я рекомендую вам использовать некоторый уровень абстракции. Вы можете использовать библиотеку PHP на своей машине разработки под управлением Windows и просто функцию mail()
на производственной машине с Linux. Уровень абстракции позволяет вам обменивать почтовые драйверы в зависимости от системы, в которой работает ваше приложение. Создать абстрактный MyMailer
класс или интерфейс с абстрактным send()
методом. Наследуем два класса MyPhpMailer
и MySwiftMailer
. Внедрите метод send()
соответствующим образом.
Есть несколько SMTP-серверов, которые работают без аутентификации, но если сервер требует аутентификации, нет способа обойти это.
Встроенные функции почты PHP очень ограничены - указание SMTP-сервера возможно только в WIndows. On * nix mail()
будет использовать двоичные файлы ОС.
Если вы хотите отправить E-Mail на произвольный SMTP-сервер в сети, подумайте об использовании библиотеки, например SwiftMailer , Это позволит вам использовать, например, исходящие серверы Google Mail.
Для пользователей Unix почта () на самом деле использует команду Sendmail для отправки электронной почты. Вместо изменения приложения вы можете изменить среду. msmtp - это SMTP-клиент с синтаксисом CLI, совместимым с Sendmail, что означает, что он может использоваться вместо Sendmail. Это требует только небольшого изменения вашего php.ini.
sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"
Тогда даже функция lowly mail () может работать с поддержкой SMTP. Это очень полезно, если вы пытаетесь подключить существующее приложение к почтовым службам, таким как sendgrid или mandrill, без изменения приложения.