コード例 #1
0
ファイル: notify.go プロジェクト: chop-dbhi/scds
func NotifyEmail(cfg *Config, o *Object, r *Revision) error {
	var (
		e   *email.Email
		err error
	)

	// First version.
	if r.Version == 1 {
		e, err = newObjectEmail(cfg, o)
	} else {
		e, err = changedObjectEmail(cfg, o, r)
	}

	if err != nil {
		return err
	}

	q := bson.M{
		"subscribed": true,
	}

	p := bson.M{
		"email": 1,
	}

	var subs []*Subscriber

	if err = cfg.Mongo.Subscribers().Find(q).Select(p).All(&subs); err != nil {
		return err
	}

	// No subscribers.
	if len(subs) == 0 {
		return nil
	}

	e.From = cfg.SMTP.From
	e.To = make([]string, 1)

	for _, sub := range subs {
		e.To[0] = sub.Email

		if err = e.Send(cfg.SMTP.Addr(), cfg.SMTP.Auth()); err != nil {
			log.Printf("error sending email: %s", err)
		}
	}

	return nil
}