У меня есть установка nms formmail недавно в моем блоге, и я сделал по электронной почте необязательным, однако я хотел бы убедиться, что когда он будет заполнен, проверка проверки подлинности электронной почты будет запущена , Похоже, что nms formmail предлагает эту проверку только в том случае, если требуется поле электронной почты.nms formmail - не проверять электронную почту, если не требуется + отдельная страница переадресации
Я хотел бы изменить скрипт cgi, используя собственную функцию validate_email, и перенаправить на страницу «Недействительный адрес электронной почты», если поле электронной почты не пустое, а поле недействительно.
Обратите внимание, что я добавил следующий код уже который заботится о добавлении стандартной электронной почты в случае, если поле пусто, поэтому проверка должна, вероятно, придет после этой линии где-то: $email = '[email protected]' 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 = '[email protected]' 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;
}
Я попытался сделать следующее под [email protected]' 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, но я довольно быстро в подбирая новый язык кода, поэтому, пожалуйста, медведь со мной , и постарайтесь быть как можно более подробными (желательно с примером кода вместо описания того, что вы думаете, если только это не имеет больше смысла).
попробовал '(! validate_email ($ email))', но получил еще одну ошибку (это только показано в файлах журналов): 'Undefined subroutine & CGI :: NMS :: Script :: FormMail :: validate_email, вызываемый по (eval 8) строке 1062', хотя validate_email определен намного раньше в скрипте. Я не вызываю подпрограмму внутри другой подпрограммы ...? – webeno
Добавьте 'die __PACKAGE __;' перед 'sub send_main_email', чтобы вы знали, как его называть (полное имя). Подробнее об этом в [Простом модульном учебнике] (http://perlmonks.org/?node_id=102347). Или назовите его 'sub Webeno :: valid_email' и назовите его' Webeno :: valid_email() ' – optional
Я добавил' die __PACKAGE __; 'перед' sub send_main_email' и получил эту ошибку в журнале: 'AH01215: CGI :: NMS: : Script :: FormMail at (eval 8) line 1055' ... 'AH01215: BEGIN failed - компиляция прервана в [name_of_file] .cgi line 3285', где' [name_of_file] '- это имя файла CGI на сервере , Я не знаю, как назвать подпрограмму, и я действительно хочу использовать существующую, поэтому как мне это сделать? – webeno