nms formmail - 如果不需要,则不进行电子邮件验证+单独的重定向页面

时间:2013-07-30 09:33:33

标签: perl email-validation formmail

我最近在我的博客上设置了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没有具体的了解,但是我很快就会选择新的代码语言,所以请耐心等待,并尝试尽可能详细(最好使用示例代码而不是描述你的内容)想一想,除非它当然更有意义。)

1 个答案:

答案 0 :(得分:2)

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

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