package main

import "io"
import "os/exec"
import "errors"
import "runtime"

/*
	Sending emails in a way you really shouldn't be sending them.
	This method doesn't require a SMTP server, but has higher chances of an email being rejected or being seen as spam. Use at your own risk. Only for Linux as Windows doesn't have Sendmail.
*/
func init() {
	plugins["sendmail"] = Plugin{"sendmail","Sendmail","Azareal","http://github.com/Azareal","",false,"Linux Only","",init_sendmail,activate_sendmail,deactivate_sendmail}
}

func init_sendmail() {
	add_hook("email_send_intercept", send_sendmail)
}

// Sendmail is only available on Linux
func activate_sendmail() error {
	if !site.EnableEmails {
		return errors.New("You have emails disabled in your configuration file")
	}
	if runtime.GOOS != "linux" {
		return errors.New("This plugin only supports Linux")
	}
	return nil
}

func deactivate_sendmail() {
	remove_vhook("email_send_intercept")
}

func send_sendmail(data ...interface{}) interface{} {
	to := data[0].(string)
	subject := data[1].(string)
	body := data[2].(string)
	
	msg := "From: " + site.Email + "\n"
	msg += "To: " + to + "\n"
	msg += "Subject: " + subject + "\n\n"
	msg += body + "\n"
	
	sendmail := exec.Command("/usr/sbin/sendmail","-t","-i")
	stdin, err := sendmail.StdinPipe()
	if err != nil {
		return false // Possibly disable the plugin and show an error to the admin on the dashboard? Plugin log file?
	}
	
	err = sendmail.Start()
	if err != nil {
		return false
	}
	io.WriteString(stdin, msg)
	
	err = stdin.Close()
	if err != nil {
		return false
	}
	
	return sendmail.Wait() == nil
}