Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer .
Обычно я использую SwiftMailer всякий раз, когда мне нужно для отправки писем с PHP.
require 'mail/swift_required.php';
$message = Swift_Message::newInstance()
// The subject of your email
->setSubject('Jane Doe sends you a message')
// The from address(es)
->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
// The to address(es)
->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
// Here, you put the content of your email
->setBody('New message
Here goes the rest of my message
', 'text/html');
if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
echo json_encode([
"status" => "OK",
"message" => 'Your message has been sent!'
], JSON_PRETTY_PRINT);
} else {
echo json_encode([
"status" => "error",
"message" => 'Oops! Something went wrong!'
], JSON_PRETTY_PRINT);
}
Подробнее о том, как использовать SwiftMailer, см. в официальной документации .
Есть два отличия:
apply
принимает экземпляр в качестве получателя, а with
требует, чтобы экземпляр передавался как аргумент. В обоих случаях экземпляр станет this
внутри блока. apply
возвращает приемник, а with
возвращает результат последнего выражения в своем блоке. Я не уверен, что могут быть какие-то строгие правила, какие функции выбрать. Обычно вы используете apply
, когда вам нужно что-то делать с объектом и возвращать его. И когда вам нужно выполнить некоторые операции над объектом и вернуть другой объект, вы можете использовать либо with
, либо run
. Я предпочитаю run
, потому что это более читаемо, на мой взгляд, но это вопрос вкуса.
apply
//returns receiver T, T exposed as `this`
fun <T> T.apply(block: T.() -> Unit): T
Описание
Функция apply
вызывается на приемнике T
, который будет отображаться как this
в прошло лямбда-выражение. Приемник также автоматически становится результатом apply
.
with
//return arbitrary value R, not an extension function, T exposed as `this`
fun <T, R> with(receiver: T, block: T.() -> R): R
Описание
Функция with
, в отличие от ко всем другим функциям области видимости (let
, run
, also
, apply
), не определяется как функция расширения . Вместо этого функция вызывается с объектом-приемником в качестве первого аргумента явно. То же, что и apply
, приемник отображается как this
в проходящей лямбда. Результатом лямбда, т. Е. Последнего утверждения, становится результат (R
) of with
.
foo?.apply { /* maybe do something */ }
– Kirill Rakhman 14 April 2016 в 14:57run
тоже неплохо. Что касается меня, тоwith
абсолютно бесполезен. Я не использую его в своем коде. – Michael 14 April 2016 в 14:59this
для функции расширения: kotlinlang.org/docs/reference/extensions.html – Michael 23 May 2017 в 09:58