export.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/Jinnrry/pmail/config"
  5. "github.com/Jinnrry/pmail/db"
  6. "github.com/Jinnrry/pmail/hooks/spam_block/tools"
  7. "github.com/Jinnrry/pmail/models"
  8. "github.com/spf13/cast"
  9. "os"
  10. )
  11. func getType(emailId int) int {
  12. var ue models.UserEmail
  13. _, err := db.Instance.Table(&ue).Where("email_id = ?", emailId).Limit(1).Get(&ue)
  14. if err != nil {
  15. fmt.Println(err)
  16. }
  17. if ue.Status == 3 {
  18. return 2
  19. }
  20. if ue.Status == 5 {
  21. return 1
  22. }
  23. return 0
  24. }
  25. func main() {
  26. args := os.Args
  27. var id int
  28. if len(args) >= 2 {
  29. id = cast.ToInt(args[1])
  30. }
  31. config.Init()
  32. err := db.Init("test")
  33. if err != nil {
  34. panic(err)
  35. }
  36. fmt.Println(config.Instance.DbDSN)
  37. fmt.Println("文件第一列是分类,0表示正常邮件,1表示垃圾邮件,2表示诈骗邮件")
  38. var start int
  39. file, err := os.OpenFile("data.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0777)
  40. if err != nil {
  41. fmt.Println(err)
  42. }
  43. defer file.Close()
  44. for {
  45. var emails []models.Email
  46. if id > 0 {
  47. db.Instance.Table(&models.Email{}).Where("id = ?", id).OrderBy("id").Find(&emails)
  48. } else {
  49. db.Instance.Table(&models.Email{}).Where("id > ?", start).OrderBy("id").Find(&emails)
  50. }
  51. if len(emails) == 0 {
  52. break
  53. }
  54. for _, email := range emails {
  55. start = email.Id
  56. content := tools.Trim(tools.TrimHtml(email.Html.String))
  57. if content == "" {
  58. content = tools.Trim(email.Text.String)
  59. }
  60. _, err = file.WriteString(fmt.Sprintf("%d \t%s %s\n", getType(email.Id), email.Subject, content))
  61. if err != nil {
  62. fmt.Println(err)
  63. }
  64. //fmt.Printf("0 \t%s %s\n", email.Subject, trim(trimHtml(email.Html.String)))
  65. }
  66. if id > 0 {
  67. break
  68. }
  69. }
  70. }