Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer , это плагин у которого есть все необходимое для отправки почты, единственное, что вы должны учесть, это иметь SMTP-порт (порт: 25 и 465), включен
require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';
$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'correo@gmail.com';
$mail->Password = 'contrasenia';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//Recipients
$mail->setFrom('correo@gmail.com', 'my name');
$mail->addAddress('destination@correo.com');
//Attachments
$mail->addAttachment('optional file'); // Add files, is optional
//Content
$mail->isHTML(true);// Set email format to HTML
$mail->Subject = utf8_decode("subject");
$mail->Body = utf8_decode("mail content");
$mail->AltBody = '';
$mail->send();
}
catch (Exception $e){
$error = $mail->ErrorInfo;
}
Реагирующие события на самом деле являются синтетическими событиями, а не родными событиями. Как написано здесь :
Делегирование событий: React фактически не присоединяет обработчики событий к самим узлам. Когда React запускается, он начинает прослушивать все события на верхнем уровне с помощью одного прослушивателя событий. Когда компонент монтируется или размонтируется, обработчики событий просто добавляются или удаляются из внутреннего сопоставления. Когда происходит событие, React знает, как его отправить, используя это сопоставление. Когда в сопоставлении нет обработчиков событий, обработчики событий React являются простыми no-ops.
Попробуйте использовать Use
Event.stopImmediatePropagation
:upvote: (e) -> e.stopPropagation(); e.nativeEvent.stopImmediatePropagation();
попробуйте связать (это), чтобы ваш код выглядел ниже -
<a className="upvotes" onClick={this.upvote.bind(this)}>upvote</a>
или если вы пишете в es6, реагируете на компонент в конструкторе, вы можете сделать это
constructor(props){
super(props);
this.upvote = this.upvote.bind(this);
}
upvote(e){ // function upvote
e.preventDefault();
return false
}
this
в своем обработчике событий и имеют совершенно другую проблему.
– Dimitar
8 February 2018 в 18:38
У меня были некоторые проблемы с привязными тегами и preventDefault
в прошлом, и я всегда забываю, что я делаю неправильно, поэтому вот что я понял.
У меня часто возникает проблема что я пытаюсь получить доступ к атрибутам компонента путем деструктурирования их непосредственно , как и с другими компонентами React. Это не сработает, страница перезагрузится, даже с помощью e.preventDefault()
:
function (e, { href }) {
e.preventDefault();
// Do something with href
}
...
<a href="/foobar" onClick={clickHndl}>Go to Foobar</a>
Кажется, что разрушение вызывает ошибку (Cannot read property 'href' of undefined
), которая не отображается на консоли, возможно, из-за полная перезагрузка страницы. Поскольку функция ошибочна, preventDefault
не вызывается. Если href равно #, ошибка отображается правильно, так как фактическая перезагрузка отсутствует.
Теперь я понимаю, что я могу получить доступ только к атрибутам в качестве аргумента второго обработчика для пользовательских компонентов React, а не для собственных HTML-тегов. Поэтому, конечно, чтобы получить доступ к атрибуту HTML-тега в событии, это будет следующим:
function (e) {
e.preventDefault();
const { href } = e.target;
// Do something with href
}
...
<a href="/foobar" onClick={clickHndl}>Go to Foobar</a>
Надеюсь, это поможет другим людям, как я, озадаченным непонятными ошибками!
Если вы используете React Router, я бы предложил заглянуть в библиотеку реакции-router-bootstrap, которая имеет удобный компонент LinkContainer. Этот компонент предотвращает перезагрузку страницы по умолчанию, поэтому вам не нужно иметь дело с событием.
В вашем случае это может выглядеть примерно так:
import { LinkContainer } from 'react-router-bootstrap';
<LinkContainer to={givePathHere}>
<span className="upvotes" onClick={this.upvote}>upvote</span>
</LinkContainer>
Полная версия решения будет обертывать метод upvotes внутри onClick, передавая e и используя native e.preventDefault ();
upvotes(e){
e.preventDefault();
//do something...
}
render(){
return (<a type="simpleQuery" onClick={(e) => {this.upvotes(e)}}>
upvote
</a>);
{
Гист, который я нашел и работает для меня:
const DummyLink = ({onClick, children, props}) => (
<a href="#" onClick={evt => {
evt.preventDefault();
onClick && onClick();
}} {...props}>
{children}
</a>
);
Кредит для srph https://gist.github.com/srph/020b5c02dd489f30bfc59138b7c39b53
onClick
в качестве переданного имени функции функции, но что-то вроде handleClick
вместо этого? Это запутанно, другие менее опытные разработчики могут подумать, что это действительно связанное событие с компонентом, в то время как это не так. Кроме того, при этом вы создаете новую функцию каждый раз, когда компонент повторно отображает, даже если он получает те же реквизиты. Это считается плохой практикой.
– elQueFaltaba
23 March 2017 в 10:43
Это связано с тем, что эти обработчики не сохраняют область видимости. Из документации для реагирования: реакция документации
Проверьте раздел «no autobinding». Вы должны написать обработчик: onClick = () => {}
render: -> <a className="upvotes" onClick={(e) => {this.upvote(e); }}>upvote</a>
Если вы используете флажок
<input
type='checkbox'
onChange={this.checkboxHandler}
/>
stopPropagation и stopImmediatePropagation не будут работать.
Поскольку вы должны использовать onClick = {this.checkboxHandler}