#!/usr/bin/perl

#Web Sender Ver 2.03 (2007/05/11)
#
#Copyright(C) 2002-2007 Knight, All rights reserved.
#Mail ... support@web-liberty.net
#Home ... http://www.web-liberty.net/

#――――― 初期処理 ――――――――――――――――――――――――

package main;

use strict;
use lib qw(./lib);

use webliberty::Basis;
use webliberty::Parser;
use webliberty::String;
use webliberty::Skin;
use webliberty::Sendmail;

require './init.cgi';

#――――― メイン処理 ―――――――――――――――――――――――

my $init = &init::get_init;

my $basis_ins  = new webliberty::Basis;
my $parser_ins = new webliberty::Parser;

if ($parser_ins->get_query('mode') eq 'send') {
	&check;
	&complete;
} else {
	$basis_ins->error('不正なアクセスです。');
}

exit;

#――――― サブルーチン ――――――――――――――――――――――

### 入力内容チェック
sub check {
	my $mail_ins    = new webliberty::String($parser_ins->get_query('mail'));
	my $account_ins = new webliberty::String($parser_ins->get_query('account'));
	my $domain_ins  = new webliberty::String($parser_ins->get_query('domain'));

	my(@error_message, $address);

	if (!$mail_ins->get_string and ($account_ins->get_string or $domain_ins->get_string)) {
		if (!$account_ins->get_string) {
			push(@error_message, 'アカウントが入力されていません。');
		}
		if (!$domain_ins->get_string) {
			push(@error_message, 'ドメインが入力されていません。');
		}
		$address = $account_ins->get_string . '@' . $domain_ins->get_string;
	} else {
		if (!$mail_ins->get_string) {
			push(@error_message, 'メールアドレスが入力されていません。');
		}
		$address = $mail_ins->get_string;
	}

	if ($address and ($address =~ /[^\w\.\@\d\+\-\_]/ or $address !~ /(.+)\@(.+)\.(.+)/)) {
		push(@error_message, 'メールアドレスの入力内容が正しくありません。');
	}

	if ($error_message[0]) {
		my $skin_ins = new webliberty::Skin;
		$skin_ins->parse_skin($init->{skin_error});

		print $basis_ins->header;
		print $skin_ins->get_data('error_head');

		foreach (@error_message) {
			print $skin_ins->get_replace_data(
				'error',
				INFO_ERROR => $_
			);
		}

		print $skin_ins->get_data('error_foot');

		exit;
	}

	return;
}

### 送信完了
sub complete {
	my $mail_ins    = new webliberty::String($parser_ins->get_query('mail'));
	my $account_ins = new webliberty::String($parser_ins->get_query('account'));
	my $domain_ins  = new webliberty::String($parser_ins->get_query('domain'));

	my $address;
	if (!$mail_ins->get_string and ($account_ins->get_string or $domain_ins->get_string)) {
		$address = $account_ins->get_string . '@' . $domain_ins->get_string;
	} else {
		$address = $mail_ins->get_string;
	}

	#メール送信
	my $sendmail_ins = new webliberty::Sendmail($init->{sendmail_path});
	my $flag = $sendmail_ins->sendmail(
		send_to   => $address,
		send_from => $init->{mail_from},
		subject   => $init->{mail_subject},
		name      => $init->{mail_name},
		message   => $init->{mail_message}
	);
	if (!$flag) {
		$basis_ins->error('メールの送信に失敗しました。');
	}

	#送信完了画面
	my $skin_ins = new webliberty::Skin;
	$skin_ins->parse_skin($init->{skin_complete});

	print $basis_ins->header;
	print $skin_ins->get_replace_data(
		'_all',
		INFO_BACK => $init->{back_url}
	);

	return;
}
