我最近在我的博客上设置了nms formmail,并且我将电子邮件设置为可选,但是我想确保在填写它时运行电子邮件验证检查。看起来 nms formmail 仅在需要电子邮件字段的情况下才提供此检查。
我想使用它自己的 validate_email 函数修改 cgi 脚本并重定向到“电子邮件无效”页面,以防电子邮件字段不为空且该字段无效。
请注意,我已经添加了以下代码,用于在字段为空的情况下添加标准电子邮件,因此检查可能应该在此行之后某处:$email = 'empty_email@mydomain.com' unless $email;
在这段代码中:
sub send_main_email {
my ($self, $date, $email, $realname) = @_;
my $mailer = $self->mailer;
$mailer->newmail($self->name_and_version, $self->{CFG}{postmaster}, @{ $self->{Recipients} });
$email = 'empty_email@mydomain.com' unless $email;
$self->send_main_email_header($email, $realname);
$mailer->print("\n");
$self->send_main_email_body_header($date);
$self->send_main_email_print_config;
$self->send_main_email_fields;
$self->send_main_email_footer;
$mailer->endmail;
}
我尝试在下面执行以下操作empty_email@mydomain.com' unless $email;
:
if (validate_email($email) = 0) {
print $self->cgi_object->redirect($self->{FormConfig}{'bad_email'});
}
...但它返回了这个错误:Can't modify non-lvalue subroutine call at (eval 8) line 1062.
这是我正在使用的 HTML:
<form method=post action="http://mydomain.com/formmail.cgi">
<label for="realname">name (optional)</label><br />
<input type=text name="realname" /><br />
<label for="email">e-mail (optional)</label><br />
<input type=text name="email"/><br />
<label for="text">text (required)</label><br />
<textarea name=text></textarea><br />
<input type=submit value="send">
<input type=hidden name="redirect" value="http://mydomain.com/thank-you.html">
<input type=hidden name="subject" value="Email form submitted">
<input type=hidden name="required" value="text">
<input type=hidden name="missing_fields_redirect" value="http://mydomain.com/missing-field.html">
<input type=hidden name="bad_email" value="http://www.google.com/">
<input type=hidden name="env_report" value="REMOTE_HOST,REMOTE_ADDR,HTTP_USER_AGENT">
<input type=hidden name="sort" value="order:contact,text">
</form>
请注意,我对 perl 没有特定的知识,但是我在学习新的代码语言方面很快,所以请耐心等待,并尝试尽可能详细(最好使用示例代码而不是描述您的想法,除非它当然更有意义)。