1

我最近在我的博客上设置了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 没有特定的知识,但是我在学习新的代码语言方面很快,所以请耐心等待,并尝试尽可能详细(最好使用示例代码而不是描述您的想法,除非它当然更有意义)。

4

1 回答 1

2

if (validate_email($email) = 0)应该是if ( not validate_email($email) ) { orif ( !validate_email($email) ) {或者if ( 0 == validate_email($email) ) {因为 = 是赋值运算符, == 是数值相等运算符

这涵盖了语法错误,我有时间 :) “valid_email” 听起来更好大声朗读(如果不是 valid_email foo@example.com 然后重定向到 badmailpage

于 2013-07-30T10:44:02.020 回答