#21564, external message services: preview and send messages through the UI
[freeside.git] / FS / FS / cust_msg.pm
index 72f64b9..ec2c961 100644 (file)
@@ -45,10 +45,14 @@ from FS::Record.  The following fields are currently supported:
 
 =item header - message header
 
-=item body - message body
+=item body - message body (as a complete MIME document)
+
+=item preview - HTML fragment to show as a preview of the message
 
 =item error - Email::Sender error message (or null for success)
 
+=item status - "prepared", "sent", or "failed"
+
 =back
 
 =head1 METHODS
@@ -137,6 +141,7 @@ sub check {
     || $self->ut_textn('env_to')
     || $self->ut_anything('header')
     || $self->ut_anything('body')
+    || $self->ut_anything('preview')
     || $self->ut_enum('status', \@statuses)
     || $self->ut_textn('error')
     || $self->ut_enum('msgtype', [  '',
@@ -150,10 +155,28 @@ sub check {
   $self->SUPER::check;
 }
 
+=item send
+
+Sends the message through its parent L<FS::msg_template>. Returns an error
+message on error, or an empty string.
+
+=cut
+
+sub send {
+  my $self = shift;
+  # it's still allowed to have cust_msgs without message templates, but only 
+  # for email.
+  my $msg_template = $self->msg_template || 'FS::msg_template::email';
+  $msg_template->send_prepared($self);
+}
+
 =item entity
 
 Returns the complete message as a L<MIME::Entity>.
 
+XXX this only works if the message in fact contains a MIME entity. Messages
+created by external APIs may not look like that.
+
 =item parts
 
 Returns a list of the MIME parts contained in the message, as L<MIME::Entity>