Advertisement
Guest User

Untitled

a guest
Sep 9th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "flag"
  5. "io"
  6. "io/ioutil"
  7. "os"
  8.  
  9. "github.com/mauleyzaola/glog"
  10. )
  11.  
  12. import (
  13. "fmt"
  14. "os/exec"
  15. "strings"
  16. )
  17.  
  18. func main() {
  19. flag.Parse()
  20.  
  21. if isFromStdIn() {
  22. data, err := readStdIn(os.Stdin)
  23. if err != nil {
  24. glog.Error(err)
  25. return
  26. }
  27. if len(data) == 0 {
  28. fmt.Println("nothing from stdin")
  29. return
  30. }
  31. lines := parseLines(string(data))
  32. for _, v := range lines {
  33. so, ta, err := parseLine(v)
  34. if so == nil {
  35. break
  36. }
  37. if err != nil {
  38. glog.Error(err)
  39. return
  40. }
  41. if err = execute(so, ta); err != nil {
  42. glog.Error(err)
  43. return
  44. }
  45. }
  46. } else {
  47. fmt.Println("invalid or empty stdin pipe")
  48. return
  49. }
  50.  
  51. }
  52.  
  53. func parseLines(data string) []string {
  54. return strings.Split(data, "\n")
  55. }
  56.  
  57. func parseLine(line string) (so, ta *mail, err error) {
  58. values := strings.Split(line, ";")
  59. if len(values) <= 1 {
  60. return
  61. }
  62.  
  63. if len(values) != 6 {
  64. return nil, nil, fmt.Errorf("wrong line:%s", line)
  65. }
  66. so = &mail{
  67. host: values[0],
  68. user: values[1],
  69. password: values[2],
  70. }
  71. ta = &mail{
  72. host: values[3],
  73. user: values[4],
  74. password: values[5],
  75. }
  76. return
  77. }
  78.  
  79. type mail struct {
  80. host, user, password string
  81. }
  82.  
  83. func execute(s, t *mail) error {
  84. var args []string
  85. args = append(args, "--host1")
  86. args = append(args, s.host)
  87. args = append(args, "--user1")
  88. args = append(args, s.user)
  89. args = append(args, "--password1")
  90. args = append(args, s.password)
  91. args = append(args, "--host2")
  92. args = append(args, t.host)
  93. args = append(args, "--user2")
  94. args = append(args, t.user)
  95. args = append(args, "--password2")
  96. args = append(args, t.password)
  97.  
  98. args = append(args, "--automap")
  99. args = append(args, "--tls2")
  100. // args = append(args, "--exclude \"(?i)spam\"")
  101.  
  102. cmd := exec.Command("imapsync", args...)
  103. data, err := cmd.CombinedOutput()
  104. if len(data) != 0 {
  105. fmt.Println(string(data))
  106. }
  107. return err
  108. }
  109.  
  110. func isFromStdIn() bool {
  111. stat, _ := os.Stdin.Stat()
  112. return (stat.Mode() & os.ModeCharDevice) == 0
  113. }
  114.  
  115. func readStdIn(reader io.Reader) ([]byte, error) {
  116. return ioutil.ReadAll(reader)
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement