home *** CD-ROM | disk | FTP | other *** search
- # Here an extract of package MIME::Lite::HTML
-
- package MIME::Lite::HTML;
-
- # module MIME::Lite::HTML : Provide routine to transform a HTML page in
- # a MIME::Lite mail
- # Copyright 2001 A.Barbet alian@alianwebserver.com. All rights reserved.
-
- # Revision 1.1 2002/02/07 15:58:35 bettini
- # added scanner for perl
- #
- # Revision 1.12 2002/01/07 20:18:53 alian
- # - Add replace links for frame & iframe
- # - Correct incorrect parsing in include_css for <LINK REL="SHORTCUT ICON">
- # tag. Tks to doggy@miniasp.com for idea and patch
- #
- # Revision 1.11 2001/12/13 22:42:33 alian
- # - Correct a bug with relative anchor
- #
- # Revision 1.10 2001/11/07 10:52:43 alian
- # - Add feature for get restricted url. Add LoginDetails parameter for that
- # (tks to Leon.Halford@ing-barings.com for idea)
- # - Change error in POD doc rfc2257 => rfc2557 (tks to
- # justin.zaglio@morganstanley.com)
- # - Correct warning when $url_html is undef
-
- use LWP::UserAgent;
- use HTML::LinkExtor;
- use URI::URL;
- use MIME::Lite;
- use strict;
- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-
- require Exporter;
-
- @ISA = qw(Exporter);
- @EXPORT = qw();
-
- my $LOGINDETAILS;
-
- #------------------------------------------------------------------------------
- # redefine get_basic_credentials
- #------------------------------------------------------------------------------
- {
- package RequestAgent;
- use vars qw(@ISA);
- @ISA = qw(LWP::UserAgent);
-
- sub new
- {
- my $self = LWP::UserAgent::new(@_);
- $self;
- }
-
- sub get_basic_credentials
- {
- my($self, $realm, $uri) = @_;
- # Use parameter of MIME-Lite-HTML, key LoginDetails
- if (defined $LOGINDETAILS) { return split(':', $LOGINDETAILS, 2); }
- # Ask user on STDIN
- elsif (-t)
- {
- my $netloc = $uri->host_port;
- print "Enter username for $realm at $netloc: ";
- my $user = <STDIN>;
- chomp($user);
- # 403 if no user given
- return (undef, undef) unless length $user;
- print "Password: ";
- system("stty -echo");
- my $password = <STDIN>;
- system("stty echo");
- print "\n"; # because we disabled echo
- chomp($password);
- return ($user, $password);
- }
- # Damm we got 403 with CGI (use param LoginDetails) ...
- else { return (undef, undef) }
- }
- }
-
- #------------------------------------------------------------------------------
- # new
- #------------------------------------------------------------------------------
- sub new
- {
- my $class = shift;
- my $self = {};
- bless $self, $class;
- my %param = @_;
- # Agent name
- $self->{_AGENT} = new RequestAgent;
- $self->{_AGENT}->agent("MIME-Lite-HTML $VERSION");
- $self->{_AGENT}->from('mime-lite-html@alianwebserver.com' );
- # Set debug level
- if ($param{'Debug'})
- {
- $self->{_DEBUG} = 1;
- delete $param{'Debug'};
- }
- # Set Login information
- if ($param{'LoginDetails'})
- {
- $LOGINDETAILS = $param{'LoginDetails'};
- delete $param{'LoginDetails'};
- }
- # Set type of include to do
- if ($param{'IncludeType'})
- {
- die "IncludeType must be in 'extern', 'cid' or 'location'\n" if
- ( ($param{'IncludeType'} ne 'extern') and
- ($param{'IncludeType'} ne 'cid') and
- ($param{'IncludeType'} ne 'location'));
- $self->{_include} = $param{'IncludeType'};
- delete $param{'IncludeType'};
- }
- # Defaut type: use a Content-Location field
- else {$self->{_include}='location';}
-
- ## Added by Michalis@linuxmail.org to manipulate non-us mails
- if ($param{'TextCharset'}) {
- $self->{_textcharset}=$param{'TextCharset'};
- delete $param{'TextCharset'};
- }
- else { $self->{_textcharset}='iso-8859-1'; }
- if ($param{'HTMLCharset'}) {
- $self->{_htmlcharset}=$param{'HTMLCharset'};
- delete $param{'HTMLCharset'};
- }
- else { $self->{_htmlcharset}='iso-8859-1'; }
-
- if ($param{'TextEncoding'}) {
- $self->{_textencoding}=$param{'TextEncoding'};
- delete $param{'TextEncoding'};
- }
- else { $self->{_textencoding}='7bit'; }
-
- if ($param{'HTMLEncoding'}) {
- $self->{_htmlencoding}=$param{'HTMLEncoding'};
- delete $param{'HTMLEncoding'};
- }
- else { $self->{_htmlencoding}='quoted-printable'; }
- ## End. Default values remain as they were initially set.
- ## No need to change existing scripts if you send US-ASCII.
- ## If you DON't send us-ascii, you wouldn't be able to use
- ## MIME::Lite::HTML anyway :-)
-
- # Set proxy to use to get file
- if ($param{'Proxy'})
- {
- $self->{_AGENT}->proxy('http',$param{'Proxy'}) ;
- print "Set proxy for http : ", $param{'Proxy'},"\n"
- if ($self->{_DEBUG});
- delete $param{'Proxy'};
- }
- # Set hash to use with template
- if ($param{'HashTemplate'})
- {
- $param{'HashTemplate'} = ref($param{'HashTemplate'}) eq "HASH"
- ? $param{'HashTemplate'} : %{$param{'HashTemplate'}};
- $self->{_HASH_TEMPLATE}= $param{'HashTemplate'};
- delete $param{'HashTemplate'};
- }
- $self->{_param} = \%param;
- # Ok I hope I known what I do ;-)
- MIME::Lite->quiet(1);
- return $self;
- }
-
- #------------------------------------------------------------------------------
- # POD Documentation
- #------------------------------------------------------------------------------
-
- =head1 NAME
-
- MIME::Lite::HTML - Provide routine to transform a HTML page in a MIME-Lite mail
-
- =head1 SYNOPSIS
-
- #!/usr/bin/perl -w
- # A cgi program that do "Mail this page to a friend";
- # Call this script like this :
- # script.cgi?email=myfriend@isp.com&url=http://www.go.com
- use strict;
- use CGI qw/:standard/;
- use CGI::Carp qw/fatalsToBrowser/;
- use MIME::Lite::HTML;
-
- my $mailHTML = new MIME::Lite::HTML
- From => 'MIME-Lite@alianwebserver.com',
- To => param('email'),
- Subject => 'Your url: '.param('url');
-
- my $MIMEmail = $mailHTML->parse(param('url'));
- $MIMEmail->send; # or for win user : $mail->send_by_smtp('smtp.fai.com');
- print header,"Mail envoye (", param('url'), " to ", param('email'),")<br>\n";
-
- =head1 DESCRIPTION
-
- This module is a Perl mail client interface for sending message that
- support HTML format and build them for you..
- This module provide routine to transform a HTML page in MIME::Lite mail.
- So you need this module to use MIME-Lite-HTML possibilities
-
- =head2 What's happen ?
-
- The job done is:
-
- =over
-
- =item *
-
- Get the file (LWP) if needed
-
- =item *
-
- Parse page to find include images (gif, jpg, flash)
-
- =item *
-
- Attach them to mail with adequat header if asked (default)
-
- =item *
-
- Include external CSS,Javascript file
-
- =item *
-
- Replace relative url with absolute one
-
- =item *
-
- Build the final MIME-Lite object with each part found
-
- =back
-
- =cut
-