detail.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package detail
  2. import (
  3. "database/sql"
  4. "encoding/json"
  5. "fmt"
  6. log "github.com/sirupsen/logrus"
  7. "pmail/db"
  8. "pmail/dto/parsemail"
  9. "pmail/dto/response"
  10. "pmail/models"
  11. "pmail/utils/context"
  12. "pmail/utils/errors"
  13. "strings"
  14. )
  15. func GetEmailDetail(ctx *context.Context, id int, markRead bool) (*response.EmailResponseData, error) {
  16. // 先查是否是本人的邮件
  17. var ue models.UserEmail
  18. _, err := db.Instance.Where("email_id = ?", id).Get(&ue)
  19. if err != nil {
  20. log.Error(err)
  21. }
  22. if ue.ID == 0 && !ctx.IsAdmin {
  23. return nil, errors.New("Not authorized")
  24. }
  25. //获取邮件内容
  26. var email response.EmailResponseData
  27. _, err = db.Instance.ID(id).Get(&email)
  28. if err != nil {
  29. log.WithContext(ctx).Errorf("SQL error:%+v", err)
  30. return nil, err
  31. }
  32. email.IsRead = ue.IsRead
  33. if markRead && ue.IsRead == 0 {
  34. ue.IsRead = 1
  35. _, err = db.Instance.Update(&ue)
  36. if err != nil {
  37. log.WithContext(ctx).Errorf("SQL error:%+v", err)
  38. }
  39. }
  40. // 将内容中的cid内容替换成url
  41. if email.Attachments != "" {
  42. var atts []parsemail.Attachment
  43. _ = json.Unmarshal([]byte(email.Attachments), &atts)
  44. for _, att := range atts {
  45. email.Html = sql.NullString{
  46. String: strings.ReplaceAll(email.Html.String, fmt.Sprintf("cid:%s", att.ContentID), fmt.Sprintf("/attachments/%d/%s", id, att.ContentID)),
  47. }
  48. }
  49. }
  50. return &email, nil
  51. }