Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "flag"
- "io"
- "io/ioutil"
- "os"
- "github.com/mauleyzaola/glog"
- )
- import (
- "fmt"
- "os/exec"
- "strings"
- )
- func main() {
- flag.Parse()
- if isFromStdIn() {
- data, err := readStdIn(os.Stdin)
- if err != nil {
- glog.Error(err)
- return
- }
- if len(data) == 0 {
- fmt.Println("nothing from stdin")
- return
- }
- lines := parseLines(string(data))
- for _, v := range lines {
- so, ta, err := parseLine(v)
- if so == nil {
- break
- }
- if err != nil {
- glog.Error(err)
- return
- }
- if err = execute(so, ta); err != nil {
- glog.Error(err)
- return
- }
- }
- } else {
- fmt.Println("invalid or empty stdin pipe")
- return
- }
- }
- func parseLines(data string) []string {
- return strings.Split(data, "\n")
- }
- func parseLine(line string) (so, ta *mail, err error) {
- values := strings.Split(line, ";")
- if len(values) <= 1 {
- return
- }
- if len(values) != 6 {
- return nil, nil, fmt.Errorf("wrong line:%s", line)
- }
- so = &mail{
- host: values[0],
- user: values[1],
- password: values[2],
- }
- ta = &mail{
- host: values[3],
- user: values[4],
- password: values[5],
- }
- return
- }
- type mail struct {
- host, user, password string
- }
- func execute(s, t *mail) error {
- var args []string
- args = append(args, "--host1")
- args = append(args, s.host)
- args = append(args, "--user1")
- args = append(args, s.user)
- args = append(args, "--password1")
- args = append(args, s.password)
- args = append(args, "--host2")
- args = append(args, t.host)
- args = append(args, "--user2")
- args = append(args, t.user)
- args = append(args, "--password2")
- args = append(args, t.password)
- args = append(args, "--automap")
- args = append(args, "--tls2")
- // args = append(args, "--exclude \"(?i)spam\"")
- cmd := exec.Command("imapsync", args...)
- data, err := cmd.CombinedOutput()
- if len(data) != 0 {
- fmt.Println(string(data))
- }
- return err
- }
- func isFromStdIn() bool {
- stat, _ := os.Stdin.Stat()
- return (stat.Mode() & os.ModeCharDevice) == 0
- }
- func readStdIn(reader io.Reader) ([]byte, error) {
- return ioutil.ReadAll(reader)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement