EmailJS:仅有时有效
EmailJS: Only works sometimes
我正在使用 React 和 EmailJS 设计联系表单。我的问题是,当我为名称、电子邮件、Phone 或消息输入自己的值时,电子邮件不起作用。当我单击“发送消息”按钮而不在名称、电子邮件、Phone 或消息中输入任何内容(因此它使用默认值)时,它有时会起作用(通常不是在第一次单击按钮时,而是在第二次单击时).
我不确定如何解决这个问题,希望得到帮助!
export default class Contact extends React.Component {
constructor(props) {
super(props);
this.state = { message: '', name: 'Name', email: 'Email', phone: 'Phone' };
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({
[event.target.name]: event.target.value
});
}
handleSubmit (event) {
var template_params = {
"name": "name_value",
"message": "message_value",
"phone": "phone_value",
"email": "email_value"
}
var service_id = "default_service";
var template_id = <TEMPLATE_ID_FROM_EMAILJS_ACCOUNT>;
window.emailjs.send(service_id, template_id, template_params).then(res => {
console.log('MESSAGE SENT', res.status);
alert("Message Sent!");
}).catch(e => {
console.log("There was an error", e);
});
}
render() {
return (
<section className="page-section" id="contact">
<div className="container">
<div className="row">
<div className="col-lg-12 text-center">
<h2 className="section-heading text-uppercase">Contact Us</h2>
<h3 className="section-subheading text-muted">Fill in the form below to contact us through email</h3>
</div>
</div>
<div className="row">
<div className="col-lg-12">
<form id="contactForm" name="sentMessage" noValidate="noValidate">
<div className="row">
<div className="col-md-6">
<div className="form-group">
<input className="form-control" id="name" name="name" type="text" placeholder="Your Name *" required="required" data-validation-required-message="Please enter your name." onChange={this.handleChange} value={this.state.name}></input>
<p className="help-block text-danger"></p>
</div>
<div className="form-group">
<input className="form-control" id="email" name="email" type="email" placeholder="Your Email *" required="required" data-validation-required-message="Please enter your email address." onChange={this.handleChange} value={this.state.email}></input>
<p className="help-block text-danger"></p>
</div>
<div className="form-group">
<input className="form-control" id="phone" name="phone" type="tel" placeholder="Your Phone *" required="required" data-validation-required-message="Please enter your phone number." onChange={this.handleChange} value={this.state.phone}></input>
<p className="help-block text-danger"></p>
</div>
</div>
<div className="col-md-6">
<div className="form-group">
<textarea className="form-control" id="message" name="message" placeholder="Your Message *" required="required" data-validation-required-message="Please enter a message." onChange={this.handleChange} value={this.state.message}></textarea>
<p className="help-block text-danger"></p>
</div>
</div>
<div className="clearfix"></div>
<div className="col-lg-12 text-center">
<div id="success"></div>
<button id="sendMessageButton" className="btn btn-primary btn-xl text-uppercase" type="submit" onClick={this.handleSubmit}>Send Message</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
)
}
}
不确定,但您似乎没有阻止提交的默认行为,因此您的页面刷新,您的表单是新的,并且您的函数未被调用。
尝试添加
event.preventDefault();
在 handleSubmit 函数的开头。
emailJS template setting image
请点击link查看EmailJS邮件正文模板图片。
我遇到了类似的问题。您必须使用两个或三个大括号设置 emailJS 模板,就像您在 JSX 中输入名称(名称 =“名称”)一样。(如附图所示)我似乎有一些文档列出了两个或三个大括号,似乎两种方法都有效,但并非始终如此。 (imo emailJS 似乎不一致。)您还必须确保在测试前“保存”模板设置。
<input
type ="text"
className = "form-input"
name ="name"
placeholder="Name"
onChange ={updateForm}
value = {form.name}
/>
我正在使用 React 和 EmailJS 设计联系表单。我的问题是,当我为名称、电子邮件、Phone 或消息输入自己的值时,电子邮件不起作用。当我单击“发送消息”按钮而不在名称、电子邮件、Phone 或消息中输入任何内容(因此它使用默认值)时,它有时会起作用(通常不是在第一次单击按钮时,而是在第二次单击时).
我不确定如何解决这个问题,希望得到帮助!
export default class Contact extends React.Component {
constructor(props) {
super(props);
this.state = { message: '', name: 'Name', email: 'Email', phone: 'Phone' };
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({
[event.target.name]: event.target.value
});
}
handleSubmit (event) {
var template_params = {
"name": "name_value",
"message": "message_value",
"phone": "phone_value",
"email": "email_value"
}
var service_id = "default_service";
var template_id = <TEMPLATE_ID_FROM_EMAILJS_ACCOUNT>;
window.emailjs.send(service_id, template_id, template_params).then(res => {
console.log('MESSAGE SENT', res.status);
alert("Message Sent!");
}).catch(e => {
console.log("There was an error", e);
});
}
render() {
return (
<section className="page-section" id="contact">
<div className="container">
<div className="row">
<div className="col-lg-12 text-center">
<h2 className="section-heading text-uppercase">Contact Us</h2>
<h3 className="section-subheading text-muted">Fill in the form below to contact us through email</h3>
</div>
</div>
<div className="row">
<div className="col-lg-12">
<form id="contactForm" name="sentMessage" noValidate="noValidate">
<div className="row">
<div className="col-md-6">
<div className="form-group">
<input className="form-control" id="name" name="name" type="text" placeholder="Your Name *" required="required" data-validation-required-message="Please enter your name." onChange={this.handleChange} value={this.state.name}></input>
<p className="help-block text-danger"></p>
</div>
<div className="form-group">
<input className="form-control" id="email" name="email" type="email" placeholder="Your Email *" required="required" data-validation-required-message="Please enter your email address." onChange={this.handleChange} value={this.state.email}></input>
<p className="help-block text-danger"></p>
</div>
<div className="form-group">
<input className="form-control" id="phone" name="phone" type="tel" placeholder="Your Phone *" required="required" data-validation-required-message="Please enter your phone number." onChange={this.handleChange} value={this.state.phone}></input>
<p className="help-block text-danger"></p>
</div>
</div>
<div className="col-md-6">
<div className="form-group">
<textarea className="form-control" id="message" name="message" placeholder="Your Message *" required="required" data-validation-required-message="Please enter a message." onChange={this.handleChange} value={this.state.message}></textarea>
<p className="help-block text-danger"></p>
</div>
</div>
<div className="clearfix"></div>
<div className="col-lg-12 text-center">
<div id="success"></div>
<button id="sendMessageButton" className="btn btn-primary btn-xl text-uppercase" type="submit" onClick={this.handleSubmit}>Send Message</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
)
}
}
不确定,但您似乎没有阻止提交的默认行为,因此您的页面刷新,您的表单是新的,并且您的函数未被调用。 尝试添加
event.preventDefault();
在 handleSubmit 函数的开头。
emailJS template setting image
请点击link查看EmailJS邮件正文模板图片。
我遇到了类似的问题。您必须使用两个或三个大括号设置 emailJS 模板,就像您在 JSX 中输入名称(名称 =“名称”)一样。(如附图所示)我似乎有一些文档列出了两个或三个大括号,似乎两种方法都有效,但并非始终如此。 (imo emailJS 似乎不一致。)您还必须确保在测试前“保存”模板设置。
<input
type ="text"
className = "form-input"
name ="name"
placeholder="Name"
onChange ={updateForm}
value = {form.name}
/>