QT SOLAR 愛島発電所
- 本日の発電量
- 266 kWh
- 現在の日射量
- 262 Wh/㎡
- 現在の外気温
- 11.2 ℃
(2025/10/29 09:24 更新)
QT SOLAR 愛島発電所
(2025/10/29 09:24 更新)
QT SOLAR 下増田発電所
(2025/10/29 09:18 更新)
QT SOLAR 北原東発電所
(2025/10/29 09:05 更新)
QT SOLAR 長久良辺発電所
(2025/10/29 09:21 更新)
QT SOLAR 白坂発電所
(2025/10/29 09:12 更新)
QT SOLAR 清水沢発電所
(2025/10/29 09:20 更新)
アラートメールの送信等を行うための外部のメールサーバーとのSMTPによる通信を実現します。TLS/STARTTLS (587) に対応しています。
SMTP over SSL (465) ではなく、SMTP TLS/STARTTLS (587)なので、ポートの指定は、587(通常)となります。
Gmailも使えますがログインとセキュリティから「安全性の低いアプリの許可: 有効」にする必要があります。
package SmtpUtility;
use strict;
use IO::Socket::SSL;
use MIME::Base64;
sub new
{
my $class = shift; # クラス名()
my $self = {
};
bless $self,$class;
return $self;
}
sub request
{
my($self) = shift;
my(
$server, # mail.example.com(:587)
$account, # mail account
$password, # mail password
$from, # from@mailaddress.com
$to, # to@mailaddress.com
$subject, # subject
$body, # mail body
$ref_attached # reference to file_hash("filename"=>"data")
) = @_;
my $boundary = "----------boundary". time . "_" . $$;
my ($host, $port, $socket, $receive, @keys);
$account = encode_base64($account,'');
$password = encode_base64($password,'');
$subject = encode_base64($subject,'');
$body = encode_base64($body,'');
$body =~ s/.{76}/$&\n/g;
if($server =~ /^(.+?):*(.\d+|)$/){
($host, $port) = ($1, $2);
}else{
die "Invalid Address";
}
if(!$port){
$port = getservbyname('smtp','tcp');
}
$socket = IO::Socket::INET->new (PeerAddr => $host, PeerPort => $port, Proto => 'tcp') or die "$! $host:$port";
sysread($socket,$receive,1024);
print $socket <<END_OF_STARTTLS;
EHLO localhost
STARTTLS
END_OF_STARTTLS
sysread($socket,$receive,1024);
IO::Socket::SSL->start_SSL($socket, SSL_hostname => $host ) or die $SSL_ERROR;
print $socket "AUTH LOGIN\n";
sysread($socket,$receive,1024);
print $socket "$account\r\n";
sysread($socket,$receive,1024);
print $socket "$password\r\n";
sysread($socket,$receive,1024);
print $socket "MAIL FROM: <$from>\r\n";
sysread($socket,$receive,1024);
print $socket "RCPT TO: <$to>\r\n";
sysread($socket,$receive,1024);
print $socket "DATA\r\n";
sysread($socket,$receive,1024);
print $socket <<END_OF_HEADER;
MIME-Version: 1.0
Content-Type: Multipart/Mixed; boundary=$boundary
Content-Transfer-Encoding:Base64
From: $from
To: $to
Subject: =?utf-8?B?$subject?=
END_OF_HEADER
print $socket <<END_OF_BODY;
--$boundary
Content-Transfer-Encoding: base64
Content-Type: text/plain;
charset=UTF-8
$body
END_OF_BODY
@keys = keys(%$ref_attached);
foreach( @keys ){
my($filename) = $_;
my($name) = $_;
$filename =~ s/(\W)/'%'.unpack("H2", $1)/ego;
$name =~ s/(\W)/'='.unpack("H2", $1)/ego;
my($data) = encode_base64($$ref_attached{$_},'');
$data =~ s/.{76}/$&\n/g;
print $socket <<END_OF_ATTACHMENT;
--$boundary
Content-Disposition: attachment;
filename*=utf-8''$filename
Content-Type: application/octet-stream;
name="=?utf-8?Q?$name?="
Content-Transfer-Encoding: base64
$data
END_OF_ATTACHMENT
}
print $socket "--$boundary--\r\n.\r\n";
sysread($socket,$receive,1024);
close($socket);
}
1;
使い方。
#!/usr/bin/perl use SmtpUtility; my $mail = SmtpUtility->new(); my $server = 'smtp.hoge.jp:587'; my $account = 'from@hoge.hp'; my $password = 'yourpassword'; my $from = 'from@hoge.jp'; my $to = 'to@foo.bar'; my $subject = "添付ファイル付きメールテスト"; my $body = <<EOD; これはテストです。 ファイルを添付しましたのでご確認下さい。 EOD my $file = "./image.jpg"; my $buf; my $size = -s $file; open(IN, $file); binmode(IN); read(IN, $buf, $size); close(IN); my %attachment = ( 'image.jpg' => $buf ); $mail->request( $server, $account, $password, $from, $to, $subject, $body, \%attachment );
今後検討すべきこと
宮城県仙台市太白区長町一丁目2-11
[運営者]
[発電所]
本ウェブサイト上のQT SOLAR 発電所は、グループ会社の発電所も含まれます。